ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBiODgwYTNjLi4wZTMxN2NiIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDMgKzEsMTA2OSBAQAorY29tbWl0IGJjYWI3NGJhYTZiMWIxYzk2OTAzOGFiNmY2NGExODYyMzkxODA0MDUKK0F1dGhvcjogSHVnbyBWaWxsZW5ldXZlIDxodWdvLnZpbGxlbmV1dmVAbHlydGVjaC5jb20+CitEYXRlOglUdWUgSnVsIDE1IDExOjIzOjAyIDIwMDggLTA0MDAKKworICAgIFJvdW5kIHRoZSBzZXJpYWwgcG9ydCBjbG9jayBkaXZpc29yIHZhbHVlIHJldHVybmVkIGJ5IGNhbGNfZGl2aXNvcigpCisKKyAgICBSb3VuZCB0aGUgc2VyaWFsIHBvcnQgY2xvY2sgZGl2aXNvciB2YWx1ZSByZXR1cm5lZCBieQorICAgIGNhbGNfZGl2aXNvcigpCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIdWdvIFZpbGxlbmV1dmUgPGh1Z28udmlsbGVuZXV2ZUBseXJ0ZWNoLmNvbT4KKyAgICBBY2tlZC1ieTogR2VyYWxkIFZhbiBCYXJlbiA8dmFuYmFyZW5AY2lkZWFzLmNvbT4KKworY29tbWl0IDAzMjhlZjBlZGZlOTUwZjBiN2I4YjM2OGRhZTQ4MjUzMTUwNmI3NGEKK0F1dGhvcjogUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CitEYXRlOglUdWUgSnVsIDE1IDIxOjQ0OjQ2IDIwMDggKzAyMDAKKworICAgIEZpeCBESENQIHByb3RvY29sIHNvIFUtQm9vdCBkb2VzIG5vdCByZXNwb25kIHRvbyBlYXJseQorICAgIG9uIHRoZSBuZXR3b3JrIHdpdGggaXQncyBvZmZlcmVkIElQIG51bWJlcjsgaXQgc2hvdWxkIG5vdCByZXBseSB1bnRpbAorICAgIGFmdGVyIGl0IGhhcyByZWNlaXZlZCBhIERIQ1AgQUNLIG1lc3NhZ2UuIEFsc28gZW5zdXJlcyB0aGF0IFUtQm9vdAorICAgIGRvZXMgaXQncyBESENQUkVRVUVTVCBhcyBicm9hZGNhc3QgKHBlciBSRkMgMjEzMSkuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBSb2JpbiBHZXR6IDxyZ2V0ekBibGFja2Zpbi51Y2xpbnV4Lm9yZz4KKyAgICBBY2tlZC1ieTogQmVuIFdhcnJlbiA8YmlnZ2VyYmFkZGVyYmVuQGdtYWlsLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgNzI4OGY5NzJmY2FlZTE0YTk3NDFjYjA4Yzg2ODhhMjM4NzRiNGEyZQorQXV0aG9yOiBTZWJhc3RpYW4gU2lld2lvciA8YmlnZWFzeUBsaW51dHJvbml4LmRlPgorRGF0ZToJVHVlIEp1bCAxNSAxMzozNToyMyAyMDA4ICswMjAwCisKKyAgICBjZmlfZmxhc2g6IG1ha2UgdGhlIGNvbW1hbmQgdTMyIG9ubHkKKworICAgIFRoaXMgZ290IGNoYW5nZWQgYnkgY29tbWl0IDkzYzU2ZjIxMmMKKyAgICBbY2ZpX2ZsYXNoOiBzdXBwb3J0IG9mIGxvbmcgY21kIGluIFUtYm9vdC5dCisKKyAgICBMb25nIGlzIHRoZSB3cm9uZyB0eXBlIGJlY2F1c2UgaXQgd2lsbCBiZWhhdmUgZGlmZmVyZW50bHkgb24gNjRiaXQKKyAgICBtYWNoaW5lcyBpbiBhIHdheSB0aGF0IGlzIHByb2JhYmx5IG5vdCBleHBlY3RlZC4gdTMyIHNob3VsZCBiZQorICAgIGVub3VnaC4KKworICAgIENjOiBBbGV4ZXkgS29yb2xldiA8YWtvcm9sZXZAaW5mcmFkZWFkLm9yZz4KKyAgICBDYzogVmFzaWxpeSBMZW9uZW5rbyA8dmFzaWxpeS5sZW9uZW5rb0BtYWlsLnJ1PgorICAgIFNpZ25lZC1vZmYtYnk6IFNlYmFzdGlhbiBTaWV3aW9yIDxiaWdlYXN5QGxpbnV0cm9uaXguZGU+CisKK2NvbW1pdCAzMWNmZTU3NDkxYjE4M2FjYWU1NzVkNDg2NzI5ZTE1OGYwMTZjMjdiCitBdXRob3I6IEplYW4tQ2hyaXN0b3BoZSBQTEFHTklPTC1WSUxMQVJEIDxwbGFnbmlvakBqY3Jvc29mdC5jb20+CitEYXRlOglNb24gSnVsIDE0IDIzOjQ4OjQxIDIwMDggKzAyMDAKKworICAgIHRvb2xzL2dpdGlnbm9yZTogdXBkYXRlIHRvIGFsbCBnZW5lcmF0ZWQgZmlsZXMKKworICAgIFNpZ25lZC1vZmYtYnk6IEplYW4tQ2hyaXN0b3BoZSBQTEFHTklPTC1WSUxMQVJEIDxwbGFnbmlvakBqY3Jvc29mdC5jb20+CisKK2NvbW1pdCA1ZTBkZTBlMjE2YjhmYjI3NjM0YWZiMTFjNjBhMmZhMjRjMjMzNDllCitBdXRob3I6IEFuZHJlIFNjaHdhcnogPGFuZHJlLnNjaHdhcnpAbWF0cml4LXZpc2lvbi5kZT4KK0RhdGU6CVdlZCBKdWwgOSAxODozMDo0NCAyMDA4ICswMjAwCisKKyAgICBtcGM1eHh4OiBBZGQgTVZCQ19QIGJvYXJkIHN1cHBvcnQKKworICAgIFRoZSBNVkJDX1AgaXMgYSBNUEM1MjAwQiBiYXNlZCBjYW1lcmEgc3lzdGVtIHdpdGggSW50ZWwgR2lnYWJpdCBldGhlcm5ldAorICAgIGNvbnRyb2xsZXIgKHVzaW5nIGUxMDAwKSBhbmQgY3VzdG9tIEFsdGVyYSBDeWNsb25lLUlJIEZQR0Egb24gUENJLgorCisgICAgU2lnbmVkLW9mZi1ieTogQW5kcmUgU2Nod2FyeiA8YW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlPgorICAgIFNpZ25lZC1vZmYtYnk6IEdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KKworY29tbWl0IGUyZDMxZmIzNDUwNjUzMTE1NDUyMTQ0MzYzZDViZGU0ZTVlM2U2OTMKK0F1dGhvcjogVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVRodSBKdW4gMTkgMTc6NTY6MTEgMjAwOCAtMDUwMAorCisgICAgVXBkYXRlIEZyZWVzY2FsZSBzeXNfZWVwcm9tLmMgdG8gaGFuZGxlIENDSUQgZm9ybWF0cworCisgICAgVXBkYXRlIHRoZSBzeXNfZWVwcm9tLmMgZmlsZSB0byBoYW5kbGUgYm90aCBOWElEIGFuZCBDQ0lEIEVFUFJPTSBmb3JtYXRzLiAgVGhlCisgICAgTlhJRCBmb3JtYXQgcmVwbGFjZXMgdGhlIG9sZGVyIENDSUQgZm9ybWF0LCBidXQgaXQncyBpbXBvcnRhbnQgdG8gc3VwcG9ydCBib3RoCisgICAgc2luY2UgbW9zdCBib2FyZHMgb3V0IHRoZXJlIHN0aWxsIHVzZSB0aGUgQ0NJRCBmb3JtYXQuICBUaGlzIGNoYW5nZSBpcyBpbgorICAgIHByZXBhcmF0aW9uIGZvciB1c2luZyBvbmUgZmlsZSB0byBoYW5kbGUgYm90aCBmb3JtYXRzLiAgVGhpcyB3aWxsIGFsc28gdW5pZnkKKyAgICBFRVBST00gc3VwcG9ydCBmb3IgYWxsIEZyZWVzY2FsZSA4NXh4IGFuZCA4Nnh4IGJvYXJkcy4KKworICAgIEFsc28gdXBkYXRlIHRoZSA4Nnh4IGJvYXJkIGhlYWRlciBmaWxlcyB0byB1c2UgdGhlIHN0YW5kYXJkIENGR19JMkNfRUVQUk9NX0FERFIKKyAgICBpbnN0ZWFkIG9mIElEX0VFUFJPTV9BRERSLgorCisgICAgU2lnbmVkLW9mZi1ieTogVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IGQ4NWY0NmEyNWNjYjMzZWQ5YjI5NWRlM2MyY2ZlMWNlMjcwZWNlOWEKK0F1dGhvcjogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1Lm5vYnVoaXJvQHJlbmVzYXMuY29tPgorRGF0ZToJRnJpIEp1bCAxMSAxNzoyMjo0MyAyMDA4ICswOTAwCisKKyAgICBwY2k6IHNoOiBBZGQgcGNpX3NraXBfZGV2IGFuZCBwY2lfcHJpbnRfZGV2IGZ1bmN0aW9uCisKKyAgICBBZGQgZnVuY3Rpb24gb2YgbmV3IFBDSSwgcGNpX3NraXBfZGV2IGFuZCBwY2lfcHJpbnRfZGV2LgorCisgICAgU2lnbmVkLW9mZi1ieTogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1Lm5vYnVoaXJvQHJlbmVzYXMuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKworY29tbWl0IDExMDcwMTRlODM1ZWM5ZDQ2YzAzMzNmNDIxMWQxMDRmNzc0NDJkYjAKK0F1dGhvcjogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorRGF0ZToJTW9uIEp1bCAxNCAyMDoyOTowNyAyMDA4IC0wNTAwCisKKyAgICBDbGVhbiB1cCBJTklUX1JBTSBvcHRpb25zCisKKyAgICBUaGUgTDJfSU5JVF9SQU0gb3B0aW9uIHdhcyB1bnVzZWQsIGFuZCByZWNlbnQgY2hhbmdlcyB0byB0aGUgVExCIGNvZGUKKyAgICBtZWFudCB0aGF0IHRoZSBJTklUX1JBTSBUTEJzIHdlcmVuJ3QgYmVpbmcgY2xlYXJlZCBvdXQuICBJbiBvcmRlciB0byByZWR1Y2UKKyAgICB0aGUgYW1vdW50IG9mIG1hcHBlZCBzcGFjZSBhdHRhY2hlZCB0byBub3RoaW5nLCB3ZSBjaGFuZ2UgdGhpbmdzIHNvIHRoZSBUTEJzCisgICAgZ2V0IGNsZWFyZWQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA0NTI0NTYxODIwYTkzMjdlODkxMDc4NTRiM2E3MTg3ODAwY2NmNzE5CitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CU1vbiBKdWwgMTQgMjA6MjY6NTcgMjAwOCAtMDUwMAorCisgICAgUmVtb3ZlIGZha2UgZmxhc2ggYmFuayBmcm9tIDg1NDQgRFMKKworICAgIFRoZSBmYWtlIGZsYXNoIGJhbmsgd2FzIGdlbmVyYXRpbmcgZXJyb3JzIGZvciBhbnlvbmUgd2hvIGRpZG4ndCBoYXZlIGEKKyAgICBQcm9tSkVUIGhvb2tlZCB1cCB0byB0aGUgYm9hcmQuICBBcyB0aGF0IGNvbnN0aXR1dGVzIHRoZSB2YXN0IG1ham9yaXR5IG9mCisgICAgdXNlcnMsIHdlIHJlbW92ZSBpdC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IDYzMGQ5YmZjYjVmNmQzYTQzZjI1MTkwMWE2YjQ4MDk5NGRjYjZlYTMKK0F1dGhvcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KK0RhdGU6CU1vbiBKdWwgMTQgMTQ6MDc6MDMgMjAwOCAtMDUwMAorCisgICAgTVBDODU0NERTOiBBZGQgQVRJIFZpZGVvIGNhcmQgc3VwcG9ydAorCisgICAgQWRkIHN1cHBvcnQgZm9yIHVzaW5nIGEgUENJZSBBVEkgVmlkZW8gY2FyZCBvbiBQQ0llMi4KKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCA3ZjlmNDM0N2NmMzI1YzYzYTM5ZmUzMDkxMGYzZmIyMTFhZTJjYzE1CitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglNb24gSnVsIDE0IDE0OjA3OjAyIDIwMDggLTA1MDAKKworICAgIDg1eHg6IEFkZCBzb21lIEwxL0wyIFNQUiByZWdpc3RlciBkZWZpbml0aW9ucworCisgICAgQWRkIG5ldyBMMS9MMiBTUFJzIHJlbGF0ZWQgdG8gZTUwMG1jIGNhY2hlIGNvbmZpZyBhbmQgY29udHJvbC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCBlNTg1Mjc4N2YwYzNjNDQyYTI3NjI2MmYxM2Q5MWNhNDUwNjA1YWMwCitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglNb24gSnVsIDE0IDE0OjA3OjAxIDIwMDggLTA1MDAKKworICAgIE1QQzg1NDREUzogUmVwb3J0IGJvYXJkIGlkLCBib2FyZCB2ZXJzaW9uIGFuZCBmcGdhIHZlcnNpb24uCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgNzNmMTVhMDYwZjY3YTI0NjI1NTFjMzM0MjE1YmQyMGZhYzZiODFkMQorQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJTW9uIEp1bCAxNCAxNDowNzowMCAyMDA4IC0wNTAwCisKKyAgICA4NXh4OiBDbGVhbnVwIEwyIGNhY2hlIHNpemUgZGV0ZWN0aW9uCisKKyAgICBUaGUgTDIgc2l6ZSBkZXRlY3Rpb24gY29kZSB3YXMgYSBiaXQgY29uZnVzaW5nIGFuZCB3ZSBrZXB0IGhhdmluZyB0byBhZGQKKyAgICBjb2RlIHRvIGl0IHRvIGhhbmRsZSBuZXcgcHJvY2Vzc29ycy4gIENoYW5nZSB0aGUgc2Vuc2Ugb2YgZGV0ZWN0aW9uIHNvIHdlCisgICAgbG9vayBmb3IgdGhlIG9sZGVyIHByb2Nlc3NvcnMgdGhhdCBhcmVuJ3QgY2hhbmdpbmcuCisKKyAgICBBbHNvIGFkZGVkIHN1cHBvcnQgZm9yIDFNIGNhY2hlIHNpemUgb24gODU3Mi4KKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCBjM2NhN2U1ZTAwYTI0NDUxZjIwZGYzYmRlZDlhNjFiYTU0MTkyMWRmCitBdXRob3I6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZToJRnJpIEp1bCAxMSAxNTozMzowOCAyMDA4IC0wNDAwCisKKyAgICBzYmM4NTYwOiBlbmFibGUgQ09ORklHX09GX0xJQkZEVCBieSBkZWZhdWx0CisKKyAgICBNYWtlIHRoZSBkZWZhdWx0IGJ1aWxkIGZvciB0aGUgc2JjODU2MCBib2FyZCBiZSBwb3dlcnBjCisgICAgY2FwYWJsZSB3aXRoIGxpYmZkdCBzdXBwb3J0LgorCisgICAgU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2NvbW1pdCA2YjQ0YTQ0ZWMyYWFiMTgwZDcwOTVjMWM5MmU2NjljZWUxZDNlM2JkCitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CU1vbiBKdWwgMTQgMjA6MDQ6NDAgMjAwOCAtMDUwMAorCisgICAgRml4IGluZGVudGF0aW9uIGZvciBkZWZhdWx0IGJvb3QgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKKyAgICBUaGlzIHdhcyBwcm9wb3NlZCBieSBQYXVsIEdvcnRtYWtlciBpbiByZXNwb25zZSB0byBXb2xmZ2FuZydzIGNvbW1lbnRzIG9uCisgICAgc2ltaWxhciAjZGVmaW5lcyBpbiBzYmM4NTYwLmguCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAzN2ZlZjQ5OTEwNGUyOGUwYTgzYjAyYjg1Y2EwZDFmYmU4MGQyOTRhCitBdXRob3I6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZToJRnJpIEp1bCAxMSAxNTozMzowNyAyMDA4IC0wNDAwCisKKyAgICBzYmM4NTYwOiBhZGQgZGVmYXVsdCBmZHQgdmFsdWVzCisKKyAgICBBZGQgaW4gdGhlIGRlZmF1bHQgZmR0IHNldHRpbmdzIGFuZCB0aGUgdHlwaWNhbCBFWFRSQV9FTlYKKyAgICBzZXR0aW5ncyBhcyBib3Jyb3dlZCBmcm9tIHRoZSBtcGM4NTYwYWRzLiAgRml4IGEgY291cGxlCisgICAgb2Ygc3RhbGUgcmVmZXJlbmNlcyB0byB0aGUgbXBjODU2MGFkcyBkYXRpbmcgYmFjayB0byB0aGUKKyAgICBvcmlnaW5hbCBjbG9uZS9mb3JrLgorCisgICAgU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgZDA0ZTc2ZWRmOTJmN2Y4OTY5Njk4OWU4NzAyYjk3ZTAyMDQ1NWFmMworQXV0aG9yOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6CUZyaSBKdWwgMTEgMTU6MzM6MDYgMjAwOCAtMDQwMAorCisgICAgc2JjODU2MDogYWRkIGluIGZ0X2JvYXJkX3NldHVwKCkKKworICAgIEFkZCBpbiBmb3IgdGhlIHNiYzg1NjAsIHRoZSBmdF9ib2FyZF9zZXR1cCgpIHJvdXRpbmUsIGJhc2VkIG9uIHdoYXQgaXMKKyAgICBpbiB1c2UgZm9yIHRoZSBGcmVlc2NhbGUgTVBDODU2MEFEUyBib2FyZC4KKworICAgIFNpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCitjb21taXQgYzE1OGJjYWNhM2IzMWNiZTM4YzQxNDM4MTJlNjE3MGUzOGE1NzM5MworQXV0aG9yOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6CUZyaSBKdWwgMTEgMTU6MzM6MDUgMjAwOCAtMDQwMAorCisgICAgc2JjODU2MDogZGVmaW5lIGV0aDAgYW5kIGV0aDEgaW5zdGVhZCBvZiBldGgxIGFuZCBldGgyCisKKyAgICBUaGUgZXhpc3RpbmcgY29uZmlnIGRvZXNuJ3QgZGVmaW5lIENPTkZJR19IQVNfRVRIMCwgYW5kIHNvIHRoZQorICAgIGZkdCBzdXBwb3J0IGRvZXNuJ3QgdXBkYXRlIHRoZSB6ZXJvcyBpbiB0aGUgZHRiIGxvY2FsLW1hYyB3aXRoCisgICAgcmVhbCBkYXRhIGZyb20gdGhlIHUtYm9vdCBlbnYuICBTaW5jZSB0aGUgZXhpc3RpbmcgY29uZmlnIGlzCisgICAgdGFpbG9yZWQgdG8ganVzdCB0d28gaW50ZXJmYWNlcywgZ2V0IHJpZCBvZiB0aGUgRVRIMiBkZWZpbml0aW9ucworICAgIGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgICBBbHNvIGRvbid0IGluY2x1ZGUgYW55IGVuZCB1c2VyIHNwZWNpZmljIGRhdGEgaW50byB0aGUgZW52aXJvbm1lbnQKKyAgICBieSBkZWZhdWx0IC0tIHRoaW5ncyBsaWtlIE1BQyBhZGRyZXNzLCBuZXR3b3JrIHBhcmFtZXRlcnMgZXRjLiBuZWVkCisgICAgdG8gY29tZSBmcm9tIHRoZSBlbmQgdXNlci4KKworICAgIFNpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IDBlYzQzNmQyZjk1MDc2ZDllNDZhZTU5NGRiNmU5YjFkODczMjg0MGQKK0F1dGhvcjogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOglGcmkgSnVsIDExIDE1OjMzOjA0IDIwMDggLTA0MDAKKworICAgIHNiYzg1NjA6IHByb3Blcmx5IHNldCBjczBfYm5kcyBmb3IgNTEyTUIKKworICAgIFRoZSBzYmM4NTYwIGJvYXJkIHNoaXBzIHdpdGggNTEyTUIgb2YgbWVtb3J5IGluc3RhbGxlZCwKKyAgICBidXQgdGhlIGN1cnJlbnQgY3MwX2JuZHMgaXMgaGFyZCBjb2RlZCBmb3IgMjU2TUIuICBTZXQgdGhlCisgICAgdmFsdWUgYmFzZWQgb24gQ0ZHX1NEUkFNX1NJWkUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKworY29tbWl0IDZkZTViZjI0MDA0YzhkOWM5YjA3MGJiOGY3NDE4ZDFjNDVlNWViMjcKK0F1dGhvcjogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOglGcmkgSnVsIDExIDE1OjMzOjAzIDIwMDggLTA0MDAKKworICAgIHNiYzg1NjA6IHByb3BlciBkZWZpbml0aW9ucyBmb3IgVFNFQy4KKworICAgIFRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIFRTRUMgaGF2ZSBiZWNvbWUgb3V0IG9mIGRhdGUuICBUaGVyZSBpcyBubworICAgIGxvbmdlciBhbnkgc3VjaCBvcHRpb25zIGxpa2UgIkNPTkZJR19NUEM4NXh4X1RTRUMxIiBvciBzaW1pbGFyLgorICAgIFVwZGF0ZSB0byBtYXRjaCB0aG9zZSBvZiBvdGhlciBib2FyZHMsIGxpa2UgdGhlIE1QQzg1NjBBRFMuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKyAgICBBY2tlZC1ieTogQmVuIFdhcnJlbiA8YmlnZ2VyYmFkZGVyYmVuQGdtYWlsLmNvbT4KKworY29tbWl0IDcxMDc0YWJiZTBjNzY0Mjk1NzdhZmY1OGFlZmYwYTI0YWQyMTBiMjMKK0F1dGhvcjogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOglXZWQgSnVsIDkgMTM6MjM6MDUgMjAwOCAtMDQwMAorCisgICAgOHh4eC1mZHQ6IHNldCBuczE2NTUwIGNsb2NrIGZyb20gQ0ZHX05TMTY1NTBfQ0xLLCBub3QgYmlfYnVzZnJlcQorCisgICAgU29tZSBib2FyZHMgdGhhdCBoYXZlIGV4dGVybmFsIDE2NTUwIFVBUlRzIGRvbid0IGhhdmUgYSBkaXJlY3QKKyAgICB0aWUgYmV0d2VlbiBiaV9idXNmcmVxIGFuZCB0aGUgY2xvY2sgdXNlZCBmb3IgdGhlIFVBUlRzLiAgQm9hcmRzCisgICAgdGhhdCBkbyBoYXZlIHN1Y2ggYSB0aWUgc2hvdWxkIHNldCBDRkdfTlMxNjU1MF9DTEsgdG8gYmUKKyAgICBnZXRfYnVzX2ZyZXEoMCkgLS0gd2hpY2ggbW9zdCBvZiB0aGVtIGRvIGFscmVhZHkuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKyAgICBBY2tlZC1ieTogS2ltIFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IDI0ZWY3NmYzMjBmYmFkZjA3NDEwNTIyOTgyNjUxNGRiMTQwZjkzOWYKK0F1dGhvcjogQW5kcmV3IEtsb3NzbmVyIDxhbmRyZXdAY2VzYS5vcGJ1Lnhlcm94LmNvbT4KK0RhdGU6CVdlZCBKdWwgMiAwNzowMzo1MyAyMDA4IC0wNzAwCisKKyAgICBDaGFuZ2UgdGhlIHRlbXAgbWFwIHRvIFJPTSB0byBhbGlnbiBhZGRyZXNzZXMgdG8gcGFnZSBzaXplLgorCisgICAgV2l0aCBhIHBhZ2Ugc2l6ZSBvZiBCT09LRV9QQUdFU1pfMTZNLCBib3RoIHRoZSByZWFsIGFuZCBlZmZlY3RpdmUKKyAgICBhZGRyZXNzZXMgbXVzdCBiZSBtdWx0aXBsZXMgb2YgMTZNQi4gIFRoZSBoYXJkd2FyZSBzaWxlbnRseSB0cnVuY2F0ZXMKKyAgICB0aGVtIHNvIHRoZSBjb2RlIGhhcHBlbnMgdG8gd29yay4gIFRoaXMgcGF0Y2ggY2xhcmlmaWVzIHRoZSBzaXR1YXRpb24KKyAgICBieSBlc3RhYmxpc2hpbmcgYWRkcmVzc2VzIHRoYXQgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgbmVlZCB0byB0cnVuY2F0ZS4KKworICAgIFNpZ25lZC1vZmYtYnk6IEFuZHJldyBLbG9zc25lciA8YW5kcmV3QGNlc2Eub3BidS54ZXJveC5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgMDZiNDE4NmMxMDIwNGI2NjgzZWRiMDQ3YWM1ZjUwNmZiMGNlMDkzNworQXV0aG9yOiBLaW0gUGhpbGxpcHMgPGtpbS5waGlsbGlwc0BmcmVlc2NhbGUuY29tPgorRGF0ZToJVHVlIEp1biAxNyAxNzo0NToyMiAyMDA4IC0wNTAwCisKKyAgICBtcGM4NXh4OiB1c2UgSVNfRV9QUk9DRVNTT1IgbWFjcm8KKworICAgIFNpZ25lZC1vZmYtYnk6IEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA2YjcwZmZiOWQxYjJlNzkxMTYxZjNjZjkyOTM3YWE0NWI0YTA3Yjc4CitBdXRob3I6IEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+CitEYXRlOglNb24gSnVuIDE2IDE1OjU1OjUzIDIwMDggLTA1MDAKKworICAgIGZkdDogYWRkIGNyeXB0byBub2RlIGhhbmRsaW5nIGZvciBNUEM4ezMsIDV9eHhFIHByb2Nlc3NvcnMKKworICAgIERlbGV0ZSB0aGUgY3J5cHRvIG5vZGUgaWYgbm90IG9uIGFuIEUtcHJvY2Vzc29yLiAgSWYgb24gODM2MCBvciA4MzR4IGZhbWlseSwKKyAgICBjaGVjayByZXYgYW5kIHVwLXJldiBjcnlwdG8gbm9kZSAodG8gU0VDIHJldi4gMi40IHByb3BlcnR5IHZhbHVlcykKKyAgICBpZiBvbiBhbiAnRUEnIHByb2Nlc3NvciwgZS5nLiBNUEM4MzQ5RUEuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLaW0gUGhpbGxpcHMgPGtpbS5waGlsbGlwc0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgODVlNTgwOGU4ZWE5Zjc3ZGE1MjE5ZjIzMzk0MTEyZjBiNDI0ZmE1ZQorQXV0aG9yOiBIdWdvIFZpbGxlbmV1dmUgPGh1Z28udmlsbGVuZXV2ZUBseXJ0ZWNoLmNvbT4KK0RhdGU6CUZyaSBKdWwgMTEgMTU6MTA6MTEgMjAwOCAtMDQwMAorCisgICAgQVJNIERhVmluY2k6IFJlbW92ZSBleHRlcm4gcGh5X3QgZGVjbGFyYXRpb24gYnkgbW92aW5nIGNvZGUgdG8gcHJvcGVyIHBsYWNlCisKKyAgICBBUk0gRGFWaW5jaTogUmVtb3ZlIGV4dGVybiBwaHlfdCBkZWNsYXJhdGlvbiBieSBtb3ZpbmcKKyAgICBjb2RlIHRvIHByb3BlciBwbGFjZS4KKworICAgIFNpZ25lZC1vZmYtYnk6IEh1Z28gVmlsbGVuZXV2ZSA8aHVnby52aWxsZW5ldXZlQGx5cnRlY2guY29tPgorCitjb21taXQgM2E5ZTdiYTJhYzE0MDE4YzVkZDFlNzhhN2RkNzM1NTcxNTY5Yzk3MQorQXV0aG9yOiBIdWdvIFZpbGxlbmV1dmUgPGh1Z28udmlsbGVuZXV2ZUBseXJ0ZWNoLmNvbT4KK0RhdGU6CUZyaSBKdWwgMTEgMTU6MTA6MTAgMjAwOCAtMDQwMAorCisgICAgQVJNIERhVmluY2k6IFJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbnMgb2YgTUFDSF9UWVBFIGFuZCBwcm90b3R5cGUgb2YgaTJjX2luaXQoKQorCisgICAgQVJNIERhVmluY2k6IFJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbnMgb2YgTUFDSF9UWVBFCisgICAgYW5kIHByb3RvdHlwZSBvZiBpMmNfaW5pdCgpLgorCisgICAgU2lnbmVkLW9mZi1ieTogSHVnbyBWaWxsZW5ldXZlIDxodWdvLnZpbGxlbmV1dmVAbHlydGVjaC5jb20+CisKK2NvbW1pdCAzNDg3NTNkNDE2Y2QyYzllN2VjNjUyMGE1NDRjOGYzM2NmMDJhNTYwCitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglNb24gSnVsIDE0IDE0OjAzOjAyIDIwMDggLTA1MDAKKworICAgIEZpeCBzb21lIG1vcmUgcHJpbnRmKCkgZm9ybWF0IHByb2JsZW1zLgorCisgICAgU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworY29tbWl0IDQ1YjE2ZDIyYzY0Njc0Y2NkOGM0NjM3NDU2YTk4NzQ2MzYwOTE0MWMKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CU1vbiBKdWwgMTQgMjI6Mzg6NDIgMjAwOCArMDIwMAorCisgICAgRml4IGNvZGluZyBzdHlsZTsgbWFrZSBjb2RlIGJldHRlciBwYXJzYWJsZSBieSBleHRlcm5hbCB0b29scworCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IGI4ODBjYmYyMDdiMWMxMDlkM2E2NjE0MTdhOGZlZGRjYmQ3MjlhOWQKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CU1vbiBKdWwgMTQgMjE6MTk6MDggMjAwOCArMDIwMAorCisgICAgY3B1L2kzODYvc2VyaWFsLmM6IEZpeCBzeW50YXggZXJyb3JzCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgZTJkNDVlNmY0ZDk5MTllMWFmZWFjNWUwOTU1N2IyMjUyODMyZmNjZgorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJTW9uIEp1bCAxNCAyMDo0MTozNSAyMDA4ICswMjAwCisKKyAgICBlbHBwYyBib2FyZDogQ29kaW5nIHN0eWxlIGNsZWFudXAuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgODJiMjRhOGE1MDVmYzgxNDY2NDg0YjNjNTViNTc0ZWUwYjQyMDViYworQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJTW9uIEp1bCAxNCAyMDo0MDoyMiAyMDA4ICswMjAwCisKKyAgICBlbHBwYyBib2FyZDogZml4IHN5bnRheCBlcnJvci4KKworICAgIFNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisKK2NvbW1pdCAwZmUzNDA1ODVhNmE0OGJkMzkyZDMxNWIwZGQ4NGQwNjhiMWMzNzkwCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CitEYXRlOglNb24gSnVsIDE0IDIwOjM4OjI2IDIwMDggKzAyMDAKKworICAgIEVCK01DRi1FVjEyMyBib2FyZDogZml4IGNvZGluZyBzdHlsZSAoYWxpbmdtZW50KQorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IDY4NDE3ODVhMGJiMGYzODE3NTQ1NmE5MjNlZGQ2MzRmYjdkZDY5NDcKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CU1vbiBKdWwgMTQgMjA6MzY6NDQgMjAwOCArMDIwMAorCisgICAgRUIrTUNGLUVWMTIzIGJvYXJkOiBmaXggc3ludHggZXJyb3IKKworICAgIFNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisKK2NvbW1pdCBhYjVjZGE5Zjg4YzNlYWY5Y2Y1OTlhZGMzYTMzNzU5MDZjNGVkOTA0CitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CU1vbiBKdWwgNyAxODowMjowOCAyMDA4IC0wNTAwCisKKyAgICBSZW1vdmUgTEJDX0NBQ0hFX0JBU0UgZnJvbSA4NTQ0IERTCisKKyAgICBUaGUgODU0NCBEUyBkb2Vzbid0IGhhdmUgYW55IGNhY2hlYWJsZSBMb2NhbCBCdXMgbWVtb3JpZXMgc2V0IHVwLiAgQnkgbWFwcGluZworICAgIHNwYWNlIGZvciBzb21lIGFueXdheSwgd2Ugd2VyZSBhbGxvd2luZyBzcGVjdWxhdGl2ZSBsb2FkcyBpbnRvIHVubWFwcGVkIHNwYWNlLAorICAgIHdoaWNoIHdvdWxkIGNhdXNlIGFuIGV4Y2VwdGlvbiAoYW5ub3lpbmcsIGV2ZW4gaWYgdWx0aW1hdGVseSBoYXJtbGVzcykuCisgICAgUmVtb3ZpbmcgTEJDX0NBQ0hFX0JBU0UsIGFuZCB1c2luZyBMQkNfTk9OQ0FDSEVfQkFTRSBmb3IgdGhlIExCQyBMQVcgc29sdmVzIHRoZQorICAgIHByb2JsZW0uCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBkMGZmNTFiYTVkMDMwOWRiZTllMjVlYTU0ZjhhMDI4NWE2ZDVkYjkwCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CitEYXRlOglNb24gSnVsIDE0IDE1OjE5OjA3IDIwMDggKzAyMDAKKworICAgIENvZGUgY2xlYW51cDogZml4IG9sZCBzdHlsZSBhc3NpZ25tZW50IGFtYmlndWl0aWVzIGxpa2UgIj0tIiBldGMuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgZDc4NTQyMjNjNWM4NWI1ODQ5ZmJmNDIyY2M4YWMwZWZlZjQ2MWMzNworQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJTW9uIEp1bCAxNCAxNToxMDo1MyAyMDA4ICswMjAwCisKKyAgICBBbWlnYU9uZUczU0U6IHJlbW92ZSBkZWFkIGFuZCBpbmNvbXBsZXRlIGZpbGVzCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgYjY0ZjE5MGI3YTM0MjI0ZGYwOWI1NTljYTExMWViMWI3MzNmMDBhZAorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJTW9uIEp1bCAxNCAxNTowNjozNSAyMDA4ICswMjAwCisKKyAgICBGaXggcHJpbnRmKCkgZm9ybWF0IGlzc3VlcyB3aXRoIHNpemVvZl90IHR5cGVzIGJ5IHVzaW5nICV6dQorCisgICAgU2lnbmVkLW9mZi1ieTogSmVhbi1DaHJpc3RvcGhlIFBMQUdOSU9MLVZJTExBUkQgPHBsYWduaW9qQGpjcm9zb2Z0LmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgZjM1NGI3M2UxNmE4NmY5ZTkwODU0NzFhODMwNjA1Zjc0Zjg0ZWE1ZAorQXV0aG9yOiBKZWFuLUNocmlzdG9waGUgUExBR05JT0wtVklMTEFSRCA8cGxhZ25pb2pAamNyb3NvZnQuY29tPgorRGF0ZToJTW9uIEp1bCAxNCAxNDoxMTo0NSAyMDA4ICswMjAwCisKKyAgICB2c3ByaW50ZjogYWRkIHogYW5kIHQgb3B0aW9ucworCisgICAgU2lnbmVkLW9mZi1ieTogSmVhbi1DaHJpc3RvcGhlIFBMQUdOSU9MLVZJTExBUkQgPHBsYWduaW9qQGpjcm9zb2Z0LmNvbT4KKworY29tbWl0IDI1ZGJlOThhYmI2ODZkODIxMGUxNzMxZmJhODVjZWQ3ZDNjZTg3NGMKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CVN1biBKdWwgMTMgMjM6MDc6MzUgMjAwOCArMDIwMAorCisgICAgRml4IHNvbWUgbW9yZSBwcmludGYoKSBmb3JtYXQgaXNzdWVzLgorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IGQ1OTk2ZGQ1NTVlZGY1MjcyMWI3NjkxYTRjNTlkZTAxNjI1MWVkMzkKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CVN1biBKdWwgMTMgMTk6NTE6MDAgMjAwOCArMDIwMAorCisgICAgRml4IHNvbWUgbW9yZSBwcmludGYoKSBmb3JtYXQgcHJvYmxlbXMuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgMGY5ZDVmNmQ2ZTgxNDkwNzc5NDk5NWM2YTIyYWY3NTIwNDBjMzVkOQorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJU3VuIEp1bCAxMyAxOTo0ODoyNiAyMDA4ICswMjAwCisKKyAgICBBRFM1MTIxOiBGaXggKGRlbGV0ZSkgaW5jb3JyZWN0IGFkczUxMjFfZGl1X2luaXQoKSBwcm90b3R5cGUKKworICAgIFNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisKK2NvbW1pdCAzMjI3MTZhMWQxZWIzM2E3MTA2N2JhMGViMWM1MzQ2ZmIyZGQ2YjM0CitBdXRob3I6IEFuYXRvbGlqIEd1c3RzY2hpbiA8YWd1c3RAZGVueC5kZT4KK0RhdGU6CVNhdCBKdWwgMTIgMTc6MzE6MzYgMjAwOCArMDIwMAorCisgICAgRml4IGJ1ZyBpbiBMaW1lIHZpZGVvIGRyaXZlcgorCisgICAgV2UgbmVlZCB0byB3YWl0IHdoaWxlIGRyYXdpbmcgZW5naW5lIGNsZWFycyBmcmFtZQorICAgIGJ1ZmZlciBiZWZvcmUgYW55IGZ1cnRoZXIgc29mdHdhcmUgYWNjZXNzZXMgdG8gZnJhbWUKKyAgICBidWZmZXIgd2lsbCBiZSBpbml0aWF0ZWQuIE90aGVyd2lzZSBzb2Z0d2FyZSBkcmF3bgorICAgIHBhcnRzIGNvdWxkIGJlIHBhcnRpYWxseSBkZXN0cm95ZWQgYnkgdGhlIGRyYXdpbmcKKyAgICBlbmdpbmUgb3IgZXZlbiBHREMgY2hpcCBmcmVlemUgY291bGQgb2NjdXIgKGFzCisgICAgb2JzZXJ2ZWQgb24gc29jcmF0ZXMgYm9hcmQpLgorCisgICAgU2lnbmVkLW9mZi1ieTogQW5hdG9saWogR3VzdHNjaGluIDxhZ3VzdEBkZW54LmRlPgorCitjb21taXQgMGE1Njc2YmVmYjBjNTkwMjEyYTUzZjc2MjdmYTVkMGQ4YTg0YmYzNAorQXV0aG9yOiBKZWFuLUNocmlzdG9waGUgUExBR05JT0wtVklMTEFSRCA8cGxhZ25pb2pAamNyb3NvZnQuY29tPgorRGF0ZToJU2F0IEp1bCAxMiAxNDozNjozNCAyMDA4ICswMjAwCisKKyAgICBGaXggc29tZSBtb3JlIHByaW50ZigpIGZvcm1hdCBpc3N1ZXMuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBKZWFuLUNocmlzdG9waGUgUExBR05JT0wtVklMTEFSRCA8cGxhZ25pb2pAamNyb3NvZnQuY29tPgorCitjb21taXQgMThjOGEyOGFhZDQ5ODAzNzgwYmQ4ZDUyNDMyZGVkNTI4ZTM3ZTcwMQorQXV0aG9yOiBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CitEYXRlOglGcmkgSnVsIDExIDE1OjExOjU3IDIwMDggKzAyMDAKKworICAgIGh3bW9uOiByZW5hbWUgQ09ORklHX0RTMTcyMiB0byBDT05GSUdfRFRUX0RTMTcyMgorCisgICAgU2lnbmVkLW9mZi1ieTogTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgorICAgIEFja2VkLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCA2ZWNiYjQ1YmIwMjdlOTBjMTlkNjNiNDhlN2IwYzA1YWNjMWE4N2MwCitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CUZyaSBKdWwgMTEgMTE6NTA6NTMgMjAwOCArMDIwMAorCisgICAgaHdtb246IENsZWFuaW5nIGh3bW9uIGRldmljZXMKKworICAgIENsZWFuIE1ha2VmaWxlCisgICAgTW92ZSBkZXZpY2Ugc3BlY2lmaWMgdmFsdWVzIHRvIGRyaXZlciBmb3IgYmV0dGVyIHJlYWRpbmcKKworICAgIFNpZ25lZC1vZmYtYnk6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KKyAgICBBY2tlZC1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgYzc4ZmNlNjk5YzdmZjQ2N2VjZDg0MWRhNmE3OWYwNjUxODBiZjU3OAorQXV0aG9yOiBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CitEYXRlOglGcmkgSnVsIDExIDEwOjQzOjEzIDIwMDggKzAyMDAKKworICAgIEZJUzogcmVwYXJlIGluY29ycmVjdCByZXR1cm4gdmFsdWUgd2l0aCByYW1kaXNrIGhhbmRsaW5nCisKKyAgICBNaWNyb2JsYXplIGFuZCBQb3dlclBDIHVzZSBib290X2dldF9yYW1kaXNrIGZvciBsb2FkaW5nCisgICAgcmFtZGlzayB0byBtZW1vcnkgd2l0aCBjaGVja2luZyByZXR1cm4gdmFsdWUuCisgICAgUmV0dXJuIDAgbWVhbnMgc3VjY2Vzcy4gUmV0dXJuIDEgbWVhbnMgZmFpbGVkLgorICAgIEhlcmUgaXMgY29ycmVzcG9uZCBwYXJ0IG9mIGNvZGUgZnJvbSBib290bS5jIHdoaWNoIGNoZWNrCisgICAgcmV0dXJuIGNvZGUuCisKKyAgICByZXQgPSBib290X2dldF9yYW1kaXNrIChhcmdjLCBhcmd2LCBpbWFnZXMsIElIX0FSQ0hfUFBDLAorCQkmcmRfZGF0YV9zdGFydCwgJnJkX2RhdGFfZW5kKTsKKyAgICBpZiAocmV0KQorCWdvdG8gZXJyb3I7CisKKyAgICBTaWduZWQtb2ZmLWJ5OiBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CisKK2NvbW1pdCA4NGEyYzY0YTI2ZGM1ZTI3NWUxY2Y0ZTc2YTZlMTk0YTE4ZmI1NDc3CitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CUZyaSBKdWwgMTEgMTA6MTA6MzIgMjAwOCArMDIwMAorCisgICAgbWljcm9ibGF6ZTogUmVtb3ZlIHVzZWxlc3MgYW5jaWVudCBoZWFkZXJzCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CisKK2NvbW1pdCA1M2VhOTgxYzMxMjRiMTNjMTM3YzJkMTBlOTc1YjdjNjY3MjI2NmUwCitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CUZyaSBKdWwgMTEgMTA6MTA6MzEgMjAwOCArMDIwMAorCisgICAgbWljcm9ibGF6ZTogQ2xlYW4gdWFydGxpdGUgZHJpdmVyCisKKyAgICBSZWRlc2lnbiB1YXJ0bGl0ZSBkcml2ZXIgdG8gaW5fYmUzMiBhbmQgb3V0X2JlMzIgbWFjcm9zCisgICAgRml4IG1pc3NpbmcgaGVhZGVyIGluIGlvLmgKKworICAgIFNpZ25lZC1vZmYtYnk6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KKyAgICBBY2tlZC1ieTogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorCitjb21taXQgZGJmM2RmYjM4NmEyZDVkMjM4MTgxNGUzOTk4NWFiMmUyMTg5NDU1MAorQXV0aG9yOiBNYXJjZWwgWmlzd2lsZXIgPG1hcmNlbEB6aXN3aWxlci5jb20+CitEYXRlOglGcmkgSnVsIDExIDAyOjM5OjE0IDIwMDggKzAyMDAKKworICAgIEVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzIHJlcXVpcmVkIGJ5IGxhdGVzdCBMaW51eCBrZXJuZWwuCisKK2NvbW1pdCBlZjEzMGQzMDkzYmRmODhmMDFjZjNlMDAwZmU1ZGYyNDllYmYyYjFhCitBdXRob3I6IEh1Z28gVmlsbGVuZXV2ZSA8aHVnby52aWxsZW5ldXZlQGx5cnRlY2guY29tPgorRGF0ZToJRnJpIEp1bCAxMSAxMDoyNDoxNSAyMDA4IC0wNDAwCisKKyAgICBGaXggaW50ZWdlciBvdmVyZmxvdyB3YXJuaW5nIGluIGNhbGNfZGl2aXNvcigpCisKKyAgICB3aGljaCBoYXBwZW5lZCB3aGVuIHJvdW5kaW5nIHRoZSBzZXJpYWwgcG9ydCBjbG9jayBkaXZpc29yCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIdWdvIFZpbGxlbmV1dmUgPGh1Z28udmlsbGVuZXV2ZUBseXJ0ZWNoLmNvbT4KKworY29tbWl0IDZiNzYwMTg5ZDc3ZjAwMTY4NGUzMTYwYjM1NWMxODVjYTM4MDQ5NjEKK0F1dGhvcjogTWFyY2VsIFppc3dpbGVyIDxtYXJjZWxAemlzd2lsZXIuY29tPgorRGF0ZToJRnJpIEp1bCAxMSAwMTowOTo1OSAyMDA4ICswMjAwCisKKyAgICBGaXggYnVpbGQgdGltZSB3YXJuaW5ncyBpbiBmdW5jdGlvbiBtbWNfZGVjb2RlX2NzZCgpCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBNYXJjZWwgWmlzd2lsZXIgPG1hcmNlbEB6aXN3aWxlci5jb20+CisKK2NvbW1pdCBjMTU5NDdkNmNlMGQ1OTkyNWM5N2ZkZmFjNjkyNDc2YWY2ZTI2MmQwCitBdXRob3I6IEh1Z28gVmlsbGVuZXV2ZSA8aHVnby52aWxsZW5ldXZlQGx5cnRlY2guY29tPgorRGF0ZToJVGh1IEp1bCAxMCAxMDo0NjozMyAyMDA4IC0wNDAwCisKKyAgICBBUk06IEZpeCBmb3IgYnJva2VuIGNvbXBpbGF0aW9uIHdoZW4gZGVmaW5pbmcgQ09ORklHX0NNRF9FTEYKKworICAgIGNhdXNlZCBieSBtaXNzaW5nIGRjYWNoZSBzdGF0dXMvZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25zLgorCisgICAgU2lnbmVkLW9mZi1ieTogSHVnbyBWaWxsZW5ldXZlIDxodWdvLnZpbGxlbmV1dmVAbHlydGVjaC5jb20+CisKK2NvbW1pdCAwNjhjMWI3N2M4ZjQyYTFhMzEwODRkMmY0YjFkNWNjODA3YzFhOWNlCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVRodSBKdWwgMTAgMTM6NTM6MzEgMjAwOCArMDIwMAorCisgICAgcHBjNHh4OiBSZW1vdmUgcmVkdW5kYW50IGZ0X2JvYXJkX3NldHVwKCkgZnVuY3Rpb25zIGZyb20gc29tZSA0eHggYm9hcmRzCisKKyAgICBUaGlzIHBhdGNoIHJlbW92ZXMgc29tZSBmdF9ib2FyZF9zZXR1cCgpIGZ1bmN0aW9ucyBmcm9tIHNvbWUgNHh4IGJvYXJkcy4KKyAgICBUaGlzIGNhbiBiZSBkb25lIHNpbmNlIHdlIG5vdyBoYXZlIGEgZGVmYXVsdCB3ZWFrIGltcGxlbWVudGF0aW9uIGZvciB0aGlzCisgICAgaW4gY3B1L3BwYzR4eC9mZHQuYy4gT25seSBib2FyZCBpbiBuZWVkIGZvciBhIGRpZmZlcmVudC9jdXN0b20KKyAgICBpbXBsZW1lbnRhdGlvbiBsaWtlIGNhbnlvbmxhbmRzIG5lZWQgdGhlaXIgb3duIHZlcnNpb24uCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCBkMzlhMDg5ZjhiYzk2MGJhOWFlNmEwOGZkYTU1ODJiNTc4NjIwY2MxCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CitEYXRlOglTdW4gSnVsIDEzIDE0OjU4OjE2IDIwMDggKzAyMDAKKworICAgIEFkZCBsYXN0IGtub3duIG1haW50YWluZXIgZm9yIG9ycGhhbmVkIGJvYXJkczsgcmVmb3JtYXQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgNWM3NjFkNTdiYjk5NDBlMDE2ZDU2MWZkYThiMmVkODRjNTVkZTViNgorQXV0aG9yOiBIYWF2YXJkIFNraW5uZW1vZW4gPGhhYXZhcmQuc2tpbm5lbW9lbkBhdG1lbC5jb20+CitEYXRlOglUaHUgSnVsIDEwIDEzOjE2OjA0IDIwMDggKzAyMDAKKworICAgIFJlbW92ZSBraGFycmlzQG5leHVzLXRlY2gubmV0IGZyb20gTUFJTlRBSU5FUlMKKworICAgIE1haWwgdG8ga2hhcnJpc0BuZXh1cy10ZWNoLm5ldCBib3VuY2VzIGJlY2F1c2UgdGhlIHVzZXIgZG9lc24ndCBleGlzdAorICAgIGFueW1vcmUuIFlvdSBjYW4ndCBiZSBhIG1haW50YWluZXIgd2l0aG91dCBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLCBzbworICAgIG1vdmUgYWxsIGJvYXJkcyB0aGF0IHVzZWQgdG8gYmUgbWFpbnRhaW5lZCBieSBLeWxlIEhhcnJpcyB0byB0aGUKKyAgICAib3JwaGFuZWQiIGxpc3QuCisKKyAgICBDdXJyZW50bHksIG9ubHkgUG93ZXJQQyBoYXMgYSBsaXN0IG9mIG9ycGhhbmVkIGJvYXJkcywgc28gdGhpcyBwYXRjaAorICAgIGNyZWF0ZXMgb25lIGZvciBBUk0gYXMgd2VsbC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aGFhdmFyZC5za2lubmVtb2VuQGF0bWVsLmNvbT4KKworY29tbWl0IDE3YmQxNzA3MTQ2M2IwY2RlMzkxYWM0YTA4NjNkNjAwNDc0YjRlYTEKK0F1dGhvcjogQW5hdG9saWogR3VzdHNjaGluIDxhZ3VzdEBkZW54LmRlPgorRGF0ZToJVGh1IEp1bCAxMCAwMToxNToxMCAyMDA4ICswMjAwCisKKyAgICBhdDkxOiBGaXggdG8gZW5hYmxlIHVzaW5nIFRlcmlkaWFuIE1JSSBwaHkgKDc4UTIxeDMpIHdpdGggYXQ5MXNhbTkyNjAKKworICAgIE9uIHRoZSBhdDkxc2FtOTI2MGVwIGRldmVsb3BtZW50IGJvYXJkIHRoZXJlIGlzIGFuIEVFUFJPTQorICAgIGNvbm5lY3RlZCB0byB0aGUgVFdJIGludGVyZmFjZSAoUEEyMywgUEEyNCBQZXJpcGhlcmFsIEEKKyAgICBtdWx0aXBsZXhpbmcpLCBzbyB3ZSBjYW5ub3QgdXNlIHRoZXNlIHBpbnMgYXMgRVRYMiwgRVRYMy4KKyAgICBUaGlzIHBhdGNoIGNvbmZpZ3VyZXMgUEExMCwgUEExMSBwaW5zIGZvciBFVFgyLCBFVFgzCisgICAgaW5zdGVhZCBvZiBQQTIzLCBQQTI0IHBpbnMuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmF0b2xpaiBHdXN0c2NoaW4gPGFndXN0QGRlbnguZGU+CisgICAgU2lnbmVkLW9mZi1ieTogTWFudWVsIFNhaG0gPE1hbnVlbC5TYWhtQGZlaWcuZGU+CisKK2NvbW1pdCBmODg5MjY1NzUzZGRmNDQ2NWQ5ZDU4MDgyN2JiOTI4OWJmYWM1NWQ2CitBdXRob3I6IEtlbm5ldGggSm9oYW5zc29uIDxrZW5uZXRoQHNvdXRocG9sZS5zZT4KK0RhdGU6CVNhdCBKdWwgMTIgMTM6MTg6MzQgMjAwOCAtMDYwMAorCisgICAgZml4IERJVSBmb3Igc21hbGwgc2NyZWVucworCisgICAgVGhlIERJVV9ESVYgcmVnaXN0ZXIgaXMgOCBiaXQgbm90IDUgYml0LiBUaGlzIHByZXZlbnRlZCBsYXJnZSBESVYgdmFsdWVzCisgICAgc28gaXQgd2FzIG5vdCBwb3NzaWJsZSB0byBzZXQgYSBzbG93IHBpeGVsIGNsb2NrIGFuZCB0aHVzIHByZXZlbnRlZAorICAgIGRpc3BsYXkgb24gc21hbGwgc2NyZWVucy4KKworICAgIFNpZ25lZC1vZmYtYnk6IEtlbm5ldGggSm9oYW5zc29uIDxrZW5uZXRoQHNvdXRocG9sZS5zZT4KKyAgICBBY2tlZC1ieTogSm9obiBSaWdieSA8anJpZ2J5QGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBiNjBiODU3Mzg3NWU2NTBlNGM2OWJlNjY3YmZjODhkM2VkNDc0YTdjCitBdXRob3I6IEpvaG4gUmlnYnkgPGpyaWdieUBmcmVlc2NhbGUuY29tPgorRGF0ZToJRnJpIEp1bCAxMSAxNDo0NDowOSAyMDA4IC0wNjAwCisKKyAgICBBRFM1MTIxIGNsZWFudXAgY29tcGlsZSB3YXJuaW5ncworCisgICAgYm9hcmQvYWRzNTEyMS9pb3Bpbi5jCisJUmVwbGFjZSBiaXQgZmllbGRzIGluIHN0cnVjdCBpb3Bpbl90IHdpdGggYSBzaW5nbGUKKwlmaWVsZCBhbmQgaW50aWFsaXplIGl0IHZpYSBwbGFpbiBvbGQgbWFjcm9zLgorCVRoaXMgZml4ZXMgdGhlIHR5cGUgcHVuIHdhcm5pbmdzIGFuZCBtYWtlcyB0aGUgY29kZQorCW1vcmUgcmVhZGFibGUuCisKKyAgICBib2FyZC9hZHM1MTIxL2FkczUxMjEuYworCUFkZCBpbmNsdWRlIGlvcGluLmggdG8gYWRzNTEyMS5jIGZvciB0aGUgaW9waW5faW5pdGlhbGl6ZQorCXByb3RvdHlwZS4KKworCUFkZCBhbiBleHRlcm4gdm9pZCBhZHM1MTIxX2RpdV9pbml0KHZvaWQpCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb2huIFJpZ2J5IDxqcmlnYnlAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IGJkZTYzNTg3NjIyYzRiODMwYTI3ZDFkZGY3MjY1ODQzZGU5ZTk5NGYKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CUZyaSBKdWwgMTEgMjI6NTY6MTEgMjAwOCArMDIwMAorCisgICAgRml4IHNvbWUgbW9yZSBwcmludGYoKSBmb3JtYXQgaXNzdWVzLgorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IDE4NGYxYjQwNGE5MGVlZjhiNDI1YzBlN2IzMDE4ZDU5ZWY5OTgyYzgKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CUZyaSBKdWwgMTEgMjI6NTU6MzEgMjAwOCArMDIwMAorCisgICAgRml4ZWQgc29tZSBvdXQtb2YtdHJlZSBidWlsZCBpc3N1ZXMKKworICAgIFNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisKK2NvbW1pdCA0N2JmOWM3MWFlODM4MzA1YTNlYTMxNjFhZjhkMTRlNmYzZmMyYzgyCitBdXRob3I6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgSnVsIDkgMTY6MjA6MjMgMjAwOCAtMDUwMAorCisgICAgQ29sZEZpcmU6IEZpeCBGQiBDUyBub3Qgc2V0dXAgcHJvcGVybHkgZm9yIE1jZjUyODIKKworICAgIFJlbW92ZSBhbGwgQ0ZHX0NTbl9STyBpbiBjcHUvbWNmNTJ4Mi9jcHVfaW5pdC5jLiBJZgorICAgIENGR19DU25fUk8gaXMgZGVmaW5lZCBhcyAwLCB0aGUgY2hpcHNlbGVjdCB3aWxsIG5vdAorICAgIGJlIGFzc2lnbmVkLgorCisgICAgU2lnbmVkLW9mZi1ieTogVHNpQ2h1bmcgTGlldyA8VHNpLUNodW5nLkxpZXdAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IGJjM2NjYjEzOWYwODM2ZjBhODM0Y2ZkMzcwYTEyMGEwMGFkN2U2M2EKK0F1dGhvcjogVHNpQ2h1bmcgTGlldyA8VHNpLUNodW5nLkxpZXdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVdlZCBKdWwgOSAxNTo0NzoyNyAyMDA4IC0wNTAwCisKKyAgICBDb2xkRmlyZTogRml4IGluY29ycmVjdCBkZWZpbmUgZm9yIG1jZjUyMjd4IGFuZCBtY2Y1NDQ1eCBSVEMKKworICAgIFJlbmFtZSBDT05GSUdfTUNGVE1SIHRvIENPTkZJR19NQ0ZSVEMgdG8gaW5jbHVkZSByZWFsIHRpbWUKKyAgICBjbG9jayBtb2R1bGUgaW4gY3B1LzxjZiBhcmNoPi9jcHVfaW5pdC5jCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgZjk0OTQ1YjUxN2YxMGUwMTkyNzEwMTY3OWM2MjM2MWUwM2Q0ZTgzNworQXV0aG9yOiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgorRGF0ZToJV2VkIEp1bCA5IDE1OjI1OjAxIDIwMDggLTA1MDAKKworICAgIENvbGRGaXJlOiBGaXggaW5jb3JyZWN0IGJvYXJkIG5hbWUgaW4gTUFLRUFMTCBmb3IgTTUyNTNFVkJFCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgMGUwYzQzNTdkMTRhMzU2M2M2YTJhMWU2ZDVhZDZhMmNjNGYzNWNhYgorQXV0aG9yOiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgorRGF0ZToJV2VkIEp1bCA5IDE1OjIxOjQ0IDIwMDggLTA1MDAKKworICAgIEZpeCBjb21waWxlIGVycm9yIGNhdXNlZCBieSBtaXNzaW5nIHRpbWVyIGZ1bmN0aW9uCisKKyAgICBBZGQgI2RlZmluZSBDT05GSUdfTUNGVE1SIGluIEVCK01DRi1FVjEyMy5oIGNvbmZpZ3VyYXRpb24gZmlsZQorCisgICAgU2lnbmVkLW9mZi1ieTogVHNpQ2h1bmcgTGlldyA8VHNpLUNodW5nLkxpZXdAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IGMzN2VhMDMxMTc1YjgwN2M1NGU2YmFkOWIyNzBlOWJlZGU2YzAwNzgKK0F1dGhvcjogVHNpQ2h1bmcgTGlldyA8VHNpLUNodW5nLkxpZXdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVdlZCBKdWwgOSAxNToxNDoyNSAyMDA4IC0wNTAwCisKKyAgICBGaXggY29tcGlsZSBlcnJvciBjYXVzZWQgYnkgaW5jb3JyZWN0IGZ1bmN0aW9uIHJldHVybiB0eXBlCisKKyAgICBSZW5hbWUgaW50IG1paV9pbml0KHZvaWQpIHRvIHZvaWQgbWlpX2luaXQodm9pZCkKKworICAgIFNpZ25lZC1vZmYtYnk6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBhYjQ4NjBiMjU1MjM5ZGJhZWNjY2RkMDAyYzhkMTFmNGVmNTRkZDc1CitBdXRob3I6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgSnVuIDE4IDE5OjI3OjIzIDIwMDggLTA1MDAKKworICAgIENvbGRGaXJlOiBGaXggcG93ZXIgdXAgaXNzdWUgZm9yIE1DRjUyMzUKKworICAgIFNpZ25lZC1vZmYtYnk6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBkZDA4ZTk3MzYxZmJjOWU3OWZhNWVmMWE4YWNmMjkyNzNiOTM0YjExCitBdXRob3I6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgSnVuIDE4IDE5OjE5OjA3IDIwMDggLTA1MDAKKworICAgIENvbGRGaXJlOiBGaXggY29tcGlsaW5nIGVycm9yIGZvciBNQ0Y1Mjc1CisKKyAgICBUaGUgY29tcGlsaW5nIGVycm9yIHdhcyBjYXVzZWQgYnkgbWlzc2luZyBhIGNsb3NlZCBwYXJlbnRoZXNlcworICAgIGluIHNwZWVkLmMKKworICAgIFNpZ25lZC1vZmYtYnk6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA5NDYwM2MyZmQ0ZGJlMDY1NTg3ODQxNmFhMGRhOWYzMDJkNGMzMGQzCitBdXRob3I6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgSnVuIDE4IDE5OjE0OjAxIDIwMDggLTA1MDAKKworICAgIENvbGRGaXJlOiBGaXggdGltZXIgaXNzdWUgZm9yIE1DRjUyNzIKKworICAgIFRoZSB0aW1lciB3YXMgYXNzaWduZWQgdG8gd3JvbmcgdGltZXIgbWVtb3J5IG1hcHBlZCB3aGljaAorICAgIGNhdXNlZCB1ZGVsYXkoKSBhbmQgdGltZXIoKSBub3Qgd29ya2luZyBwcm9wZXJseS4KKworICAgIFNpZ25lZC1vZmYtYnk6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAzYjFlOGFjOWI0M2Y4OWNjOTI5MWE2YTg2ZTZiMzNlZjU1ODAxNTE1CitBdXRob3I6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgSnVuIDE4IDE5OjEyOjEzIDIwMDggLTA1MDAKKworICAgIENvbGRGaXJlOiBDaGFuZ2UgaW52YWxpZCBKTVAgdG8gQlJBIGNhdWdodCBieSBuZXcgdjRlIHRvb2xjaGFpbgorCisgICAgU2lnbmVkLW9mZi1ieTogS3VydCBNYWhhbiA8a21haGFuQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA4MzcxZGMyMDY2MTM2YmUyMWUxMGI3YjkyOTNlNDY5Mjk3ZDc3Mjk4CitBdXRob3I6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgSnVuIDE4IDE5OjA1OjIzIDIwMDggLTA1MDAKKworICAgIENvbGRGaXJlOiBBZGQgLWdvdD1zaW5nbGUgcGFyYW0gZm9yIG5ldyBsaW51eCB2NGUgdG9vbGNoYWlucworCisgICAgU2lnbmVkLW9mZi1ieTogS3VydCBNYWhhbiA8a21haGFuQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA1NmQ1MjYxNWNkNDdiYzUyMmVlMTNiYjdlYzdlNTlkNmNlOTQyNmM3CitBdXRob3I6IFRzaUNodW5nIExpZXcgPFRzaS1DaHVuZy5MaWV3QGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgSnVuIDE4IDEzOjIxOjE5IDIwMDggLTA1MDAKKworICAgIENvbGRGaXJlOiBGaXggY29kZSBmbGFzaCBjb25maWd1cmF0aW9uIGZvciBNNTQ3eC9NNTQ4eCBib2FyZHMKKworICAgIFNpZ25lZC1vZmYtYnk6IEt1cnQgTWFoYW4gPGttYWhhbkBmcmVlc2NhbGUuY29tPgorCitjb21taXQgNmUzNzA5MWFmYzA3ZmRjYzE1NTkwMDkzZmQwNjZiMGNiNzM5OWY4NQorQXV0aG9yOiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgorRGF0ZToJVHVlIEp1biAyNCAxMjoxMjoxNiAyMDA4IC0wNTAwCisKKyAgICBDb2xkRmlyZTogRml4IHdhcm5pbmcgbWVzc2FnZXMgYnkgcGFzc2luZyBjb3JyZWN0IGRhdGEgdHlwZSBpbiBib2FyZC5jCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgODFjYzMyMzIyYWNiMWIzMjI1ZWU0NTYwNmNlZDQ4ZTJhMTQ4MjRkYworQXV0aG9yOiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgorRGF0ZToJVGh1IE1heSAyOSAxMjoyMTo1NCAyMDA4IC0wNTAwCisKKyAgICBDb2xkRmlyZTogRml4IFVBUlQgYmF1ZHJhdGUgZm9ybXVsYQorCisgICAgVGhlIGZvcm11bGEgImNvdW50ZXIgPSAodTMyKSAoZ2QtPmJ1c19jbGsgLyBnZC0+YmF1ZHJhdGUpIC8gMzIiCisgICAgY2FuIGdlbmVyYXRlIHRoZSB3cm9uZyBkaXZpc29yIGR1ZSB0byBpbnRlZ2VyIGRpdmlzaW9uIHRydW5jYXRpb24uCisgICAgUm91bmQgdGhlIGNhbGN1bGF0ZWQgZGl2aXNvciB2YWx1ZSBieSBhZGRpbmcgMS8yIHRoZSBiYXVkcmF0ZQorICAgIGJlZm9yZSBkaXZpZGluZyBieSB0aGUgYmF1ZHJhdGUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgorICAgIEFja2VkLWJ5OiBHZXJhbGQgVmFuIEJhcmVuIDx2YW5iYXJlbkBjaWRlYXMuY29tPgorCitjb21taXQgYjU3OGZiNDcxNDQ0Y2JkN2RiMTI4NTcwMWJhNTEzNDNiYWFmNzNmYgorQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglUaHUgSnVsIDEwIDExOjM4OjI2IDIwMDggKzAyMDAKKworICAgIHBwYzR4eDogRml4IGluY2x1ZGUgc2VxdWVuY2UgaW4gNHh4X3BjaWUuYworCisgICAgVGhpcyBwYXRjaCBub3cgbW92ZXMgY29tbW9uLmggdG8gdGhlIHRvcCBvZiB0aGUgaW5sY3VkZSBsaXN0LiBUaGlzCisgICAgaXMgbmVlZGVkIGZvciBib2FyZHMgd2l0aCBDT05GSUdfUEhZU182NEJJVCBzZXQgKGUuZy4ga2F0bWFpKSwgc28gdGhhdAorICAgIHRoZSBwaHlzX3NpemVfdC9waHlzX2FkZHJfdCBhcmUgZGVmaW5lZCB0byB0aGUgY29ycmVjdCBzaXplIGluIHRoaXMKKyAgICBkcml2ZXIuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCA5YjU1YTI1MzY5MTlmNGRlMWJiMTA0NGU2ZWI4MjYyYzJmNTNiYzk2CitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CitEYXRlOglGcmkgSnVsIDExIDAxOjE2OjAwIDIwMDggKzAyMDAKKworICAgIEZpeCBzb21lIG1vcmUgcHJpbnQoKSBmb3JtYXQgZXJyb3JzLgorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IGZkZDcwZDE5MjFiODcyODdkOWE5OWQxYmU5OWJjMzUyMjZjMmI0MTIKK0F1dGhvcjogSmVhbi1DaHJpc3RvcGhlIFBMQUdOSU9MLVZJTExBUkQgPHBsYWduaW9qQGpjcm9zb2Z0LmNvbT4KK0RhdGU6CVRodSBKdWwgMTAgMjA6NTc6NTQgMjAwOCArMDIwMAorCisgICAgTUFLRUFMTDogcmVtb3ZlIGR1cGxpY2F0ZWQgYXQ5MSBmcm9tIEFSTTkgbGlzdCBhbmQgYWRkIExJU1RfYXQ5MSB0byBhcm0KKworICAgIFNpZ25lZC1vZmYtYnk6IEplYW4tQ2hyaXN0b3BoZSBQTEFHTklPTC1WSUxMQVJEIDxwbGFnbmlvakBqY3Jvc29mdC5jb20+CisKK2NvbW1pdCBjNjQ1N2UzYjhiYzc5YTk3MzgxY2Y3ZGVmZmEwOGY3YzVhMjRmODZjCitBdXRob3I6IFNlcmdleSBMYXBpbiA8c2xhcGluQG9zc2ZhbnMub3JnPgorRGF0ZToJVGh1IEp1biA1IDExOjA2OjI5IDIwMDggKzA0MDAKKworICAgIERhdGFGbGFzaCBBVDQ1REIwMjEgc3VwcG9ydAorCisgICAgU29tZSBib2FyZHMgYmFzZWQgb24gQVQ5MVNBTTkyNlgtRUsgdXNlIHNtYWxsZXIgREYgY2hpcHMgdG8ga2VlcAorICAgIGJvb3RzdHJhcCwgdS1ib290IGFuZCBpdHMgZW52aXJvbm1lbnQsIHVzaW5nIE5BTkQgb3Igb3RoZXIgZXh0ZXJuYWwKKyAgICBzdG9yYWdlIGZvciBrZXJuZWwgYW5kIHJvb3Rmcy4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yCisgICAgc21hbGwgMTAyNHgyNjMgY2hpcC4KKworICAgIFNpZ25lZC1vZmYtYnk6IFNlcmdleSBMYXBpbiA8c2xhcGluQG9zc2ZhbnMub3JnPgorCitjb21taXQgNDEwOWRmNmY3NWZjMDBhYjdkYTU2ZDI4NmJhNTAxNDlhMGQxNmE2OQorQXV0aG9yOiBLaW0gUGhpbGxpcHMgPGtpbS5waGlsbGlwc0BmcmVlc2NhbGUuY29tPgorRGF0ZToJVGh1IEp1bCAxMCAxNDowMDoxNSAyMDA4IC0wNTAwCisKKyAgICBzaWxlbmNlIG1pc2MgcHJpbnRmIGZvcm1hdHRpbmcgY29tcGlsZXIgd2FybmluZ3MKKworICAgIFNpZ25lZC1vZmYtYnk6IEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAzZDcxYzgxYTliYjAzZjg2NmExZTk4ZGE5NjM2M2VmM2Y0NmM3NmIzCitBdXRob3I6IE1hcmt1cyBLbG90emLDvGNoZXIgPG1rQGRlbnguZGU+CitEYXRlOglUaHUgSnVsIDEwIDE0OjQ3OjA5IDIwMDggKzAyMDAKKworICAgIFVTQjogc2h1dGRvd24gVVNCIGJlZm9yZSBib290aW5nCisKKyAgICBUaGlzIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsbHkgc2VyaW91cyBpc3N1ZSByZWxhdGVkIHRvIFVTQiB3aGljaCB3YXMKKyAgICBkaXNjb3V2ZXJlZCBieSBNYXJ0aW4gS3JhdXNlIDxtYXJ0aW4ua3JhdXNlQHRxcy5kZT4gYW5kIGZpeGVkIGZvcgorICAgIEFSTTkyMFQuIE1hcnRpbiB3cm90ZToKKworICAgICAgVHVybiBvZmYgVVNCIHRvIHByZXZlbnQgdGhlIGhvc3QgY29udHJvbGxlciBmcm9tIHdyaXRpbmcgdG8gdGhlCisgICAgICBTRFJBTSB3aGlsZSBMaW51eCBpcyBib290aW5nLiBUaGlzIGNvdWxkIGhhcHBlbiwgYmVjYXVzZSB0aGUgSENDQQorICAgICAgKEhvc3QgQ29udHJvbGxlciBDb21tdW5pY2F0aW9uIEFyZWEpIGxpZXMgd2l0aGluIHRoZSBTRFJBTSBhbmQgdGhlCisgICAgICBob3N0IGNvbnRyb2xsZXIgd3JpdGVzIGNvbnRpbm91c2x5IHRvIHRoaXMgYXJlYSAoYXMgYnVzbWFzdGVyISksIGZvcgorICAgICAgZXhhbXBsZSB0byBpbmNyZWFzZSB0aGUgSGNjYUZyYW1lTnVtYmVyIHZhcmlhYmxlLCB3aGljaCBoYXBwZW5zCisgICAgICBldmVyeSAxIG1zLgorCisgICAgVGhpcyBpcyBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHBhdGNoIGluIG9yZGVyIHRvIHNodXRkb3duCisgICAgVVNCIHdoZW4gYm9vdGluZyBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4KKworICAgIFNpZ25lZC1vZmYtYnk6IE1hcmt1cyBLbG90emJ1ZWNoZXIgPG1rQGRlbnguZGU+CisKK2NvbW1pdCBmMzFjNDlkYjJhNWUwNzZmNDE1YzA3ODVlYjM3ZjY3ZjJmYWE1ZmM4CitBdXRob3I6IE1hcnRoYSBNYXJ4IDxtbWFyeEBzaWxpY29udGt4LmNvbT4KK0RhdGU6CVRodSBNYXkgMjkgMTQ6MjM6MjUgMjAwOCAtMDQwMAorCisgICAgQ29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciBBRFM1MTIxIFJldiAzCisKKyAgICBBRFM1MTIxIFJldiAzIGJvYXJkIGlzIG5vdyB0aGUgZGVmYXVsdCBjb25maWcKKworICAgIGNvbmZpZyB0YXJnZXRzIGFyZSBub3cKKworICAgIGFkczUxMjFfY29uZmlnCisJUmV2IDMgYm9hcmQgd2l0aAorCVBDSQorCU00MVQ2MiBvbiBib2FyZCBSVEMKKwk1MTJNQiBEUkFNCisKKyAgICBhZHM1MTIxX3JldjJfY29uZmlnCisJUmV2IDIgYm9hcmQgd2l0aAorCU5vIFBDSQorCTI1Nk1CIERSQU0KKworICAgIFNpZ25lZC1vZmYtYnk6IE1hcnRoYSBNYXJ4IDxtbWFyeEBzaWxpY29udGt4LmNvbT4KKyAgICBBY2tlZC1ieTogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorICAgIEFja2VkLWJ5OiBKb2huIFJpZ2J5IDxqcmlnYnlAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IDE2YmVlN2IwZGMyOTRlZTAxY2EyNDM0YWExZGQzYmQ3MTdhNjk2MTUKK0F1dGhvcjogTWFydGhhIE1hcnggPG1tYXJ4QHNpbGljb250a3guY29tPgorRGF0ZToJVGh1IE1heSAyOSAxNTozNzoyMSAyMDA4IC0wNDAwCisKKyAgICBDb25zb2xpZGF0ZSBBRFM1MTIxIElPIFBpbiBjb25maWd1cmF0aW9uCisKKyAgICBDb25zb2xpZGF0ZSBBRFM1MTIxIElPIFBpbiBjb25maWd1cmF0aW9uIHRvIG9uZSBmaWxlCisgICAgYm9hcmQvYWRzNTEyMS9pb3Bpbi5jLgorCisgICAgUmVtb3ZlIHBpbiBjb25maWcgZnJvbSBjcHUvbXBjNTEyeC9mZWMuYworCisgICAgU2lnbmVkLW9mZi1ieTogTWFydGhhIE1hcnggPG1tYXJ4QHNpbGljb250a3guY29tPgorICAgIEFja2VkLWJ5OiBHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CisgICAgQWNrZWQtYnk6IEpvaG4gUmlnYnkgPGpyaWdieUBmcmVlc2NhbGUuY29tPgorCitjb21taXQgZDQ2OTJiMGJhODNiN2I0NTRiYmQ5MmJhZDFmNGJlZmU2ZTE2NTdiNworQXV0aG9yOiBDaHJpc3RpYW4gRWdnZXJzIDxjaHJpc3RpYW5AcDI0MDAud2duZXR6Lnh4PgorRGF0ZToJRnJpIEp1biAyNyAxOTo0Njo1MSAyMDA4ICswMjAwCisKKyAgICBGaXggInVzYiBwYXJ0IiBjb21tYW5kCisKKyAgICBPbmx5IHByaW50IHBhcnRpdGlvbiBmb3Igc2VsZWN0ZWQgZGV2aWNlIGlmIHVzZXIgc3VwcGxpZWQgdGhlIDxkZXY+CisgICAgYXJnIHdpdGggdGhlICJ1c2IgcGFydCBbZGV2XSIgY29tbWFuZC4KKworICAgIFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBFZ2dlcnMgPGNlZ2dlcnNAZ214LmRlPgorICAgIEFja2VkLWJ5OiBNYXJrdXMgS2xvdHpidWVjaGVyIDxta0BkZW54LmRlPgorCitjb21taXQgY2M4M2IyNzIxN2Y3MzgwMDQxZmVhMzg2ZGRiNmQ2ZDliMjYxNjE3ZAorQXV0aG9yOiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorRGF0ZToJTW9uIEp1bCA3IDAwOjU4OjA1IDIwMDggKzA4MDAKKworICAgIGZpeCBVU0IgZGV2aWNlcyB3aXRoIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zCisKKyAgICBUaGlzIHBhdGNoIGZpeGVzIGJ1Z3MgaW4gdXNiZGNvcmUqLmMgcmVsYXRlZCB0byB0aGUgdXNlIG9mIGRldmljZXMKKyAgICB3aXRoIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zLgorCisgICAgVGhlIG9yaWdpbmFsIGNvZGUgbWFkZSBtaXN0YWtlcyBhYm91dCB0aGUgbWVhbmluZyBvZiBjb25maWd1cmF0aW9uIHZhbHVlIGFuZAorICAgIGNvbmZpZ3VyYXRpb24gaW5kZXgsIGFuZCB0aGUgcmVzdWx0aW5nIG9mZi1ieS1vbmUgZXJyb3JzIHJlc3VsdGVkIGluOgorCisgICAgKiBTRVRfQ09ORklHVVJBVElPTiBhbHdheXMgc2VsZWN0ZWQgdGhlIGZpcnN0IGNvbmZpZ3VyYXRpb24sIG5vIG1hdHRlciB3aGF0CisgICAgICB3VmFsdWUgaXMgYmVpbmcgcGFzc2VkLgorICAgICogR0VUX0RFU0NSSVBUT1IvQ09ORklHVVJBVElPTiBhbHdheXMgcmV0dXJuZWQgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBmaXJzdAorICAgICAgY29uZmlndXJhdGlvbiAoaW5kZXggMCkuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAb3Blbm1va28ub3JnPgorICAgIEFja2VkLWJ5OiBNYXJrdXMgS2xvdHpidWVjaGVyIDxta0BkZW54LmRlPgorCitjb21taXQgMDZjNTNiZWFlMWE3MjZlNzA3OTcxYzU1NTYxM2YwOWIyNzBhMjQ2MQorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJVGh1IEp1bCAxMCAxMzoxNjowOSAyMDA4ICswMjAwCisKKyAgICBGaXggc29tZSBtb3JlIHByaW50KCkgZm9ybWF0IGVycm9ycy4KKworICAgIFNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisKK2NvbW1pdCBkNGI1ZjNmYTAwMTIyOGQ3NmUyYzMzODBjZWRhZGY4MDRiODAyYzJhCitBdXRob3I6IENocmlzdGlhbiBFZ2dlcnMgPGNocmlzdGlhbkBwMjQwMC53Z25ldHoueHg+CitEYXRlOglGcmkgSnVuIDI3IDE5OjQ2OjUxIDIwMDggKzAyMDAKKworICAgIEZpeCAidXNiIHBhcnQiIGNvbW1hbmQKKworICAgIE9ubHkgcHJpbnQgcGFydGl0aW9uIGZvciBzZWxlY3RlZCBkZXZpY2UgaWYgdXNlciBzdXBwbGllZCB0aGUgPGRldj4KKyAgICBhcmcgd2l0aCB0aGUgInVzYiBwYXJ0IFtkZXZdIiBjb21tYW5kLgorCisgICAgU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEVnZ2VycyA8Y2VnZ2Vyc0BnbXguZGU+CisgICAgQWNrZWQtYnk6IE1hcmt1cyBLbG90emJ1ZWNoZXIgPG1rQGRlbnguZGU+CisKK2NvbW1pdCBlNzNiNTIxMmUwNDYzYTNkYjBhZjBhNWM5NWM3NWJmYjc2MmNhOTczCitBdXRob3I6IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CitEYXRlOglNb24gSnVsIDcgMDA6NTg6MDUgMjAwOCArMDgwMAorCisgICAgZml4IFVTQiBkZXZpY2VzIHdpdGggbXVsdGlwbGUgY29uZmlndXJhdGlvbnMKKworICAgIFRoaXMgcGF0Y2ggZml4ZXMgYnVncyBpbiB1c2JkY29yZSouYyByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgZGV2aWNlcworICAgIHdpdGggbXVsdGlwbGUgY29uZmlndXJhdGlvbnMuCisKKyAgICBUaGUgb3JpZ2luYWwgY29kZSBtYWRlIG1pc3Rha2VzIGFib3V0IHRoZSBtZWFuaW5nIG9mIGNvbmZpZ3VyYXRpb24gdmFsdWUgYW5kCisgICAgY29uZmlndXJhdGlvbiBpbmRleCwgYW5kIHRoZSByZXN1bHRpbmcgb2ZmLWJ5LW9uZSBlcnJvcnMgcmVzdWx0ZWQgaW46CisKKyAgICAqIFNFVF9DT05GSUdVUkFUSU9OIGFsd2F5cyBzZWxlY3RlZCB0aGUgZmlyc3QgY29uZmlndXJhdGlvbiwgbm8gbWF0dGVyIHdoYXQKKyAgICAgIHdWYWx1ZSBpcyBiZWluZyBwYXNzZWQuCisgICAgKiBHRVRfREVTQ1JJUFRPUi9DT05GSUdVUkFUSU9OIGFsd2F5cyByZXR1cm5lZCB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpcnN0CisgICAgICBjb25maWd1cmF0aW9uIChpbmRleCAwKS4KKworICAgIFNpZ25lZC1vZmYtYnk6IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+CisgICAgQWNrZWQtYnk6IE1hcmt1cyBLbG90emJ1ZWNoZXIgPG1rQGRlbnguZGU+CisKK2NvbW1pdCBlODcwNjkwYmRjYTE1NDk0M2VjYWRkNTIxMmQyZDU5YzFiOWQzOTFiCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVRodSBKdWwgMTAgMTA6MTA6NTQgMjAwOCArMDIwMAorCisgICAgTVREL05BTkQ6IEZpeCBwcmludGYgZm9ybWF0IHdhcm5pbmcgaW4gbmFuZCBjb2RlCisKKyAgICBUaGlzIHBhdGNoIGZpeGVzIE5BTkQgcmVsYXRlZCBwcmludGYgZm9ybWF0IHdhcm5pbmcuIFRob3NlIHdhcm5pbmdzIGFyZQorICAgIG5vdyB2aXNpYmxlIHNpbmNlIHBhdGNoIGRjNGIwYjM4ZDRhYWRmMDg4MjZmNmMzMTI3MGYxZWVjZDI3OTY0ZmQKKyAgICBbRml4IHByaW50ZiBlcnJvcnMuXSBieSBBbmRyZXcgS2xvc3NuZXIgaGFzIGJlZW4gYXBwbGllZC4gVGhhbmtzLCB0aGlzIGlzCisgICAgcmVhbGx5IGhlbHBmdWwuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCAxMDk0M2M5YWZhMjU2OTRiZDk5OTk0NjFmNGU5ZTUwY2UyMmZmZjJiCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVRodSBKdWwgMTAgMTA6MDA6NDUgMjAwOCArMDIwMAorCisgICAgcnRjOiBGaXggcHJpbnRmIGZvcm1hdCB3YXJuaW5nIGluIG00MXQ2MC5jCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCBkYzFkYTQyZjgxNGNkNzFlNjc1NmMyY2Y2MmFmMWFkYTFkMDU4MWZiCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVR1ZSBKdWwgOCAxMjowMTo0NyAyMDA4ICswMjAwCisKKyAgICBwY2k6IE1vdmUgUENJIGRldmljZSBjb25maWd1cmF0aW9uIGNoZWNrIGludG8gYSBzZXBhcmF0ZSB3ZWFrIGZ1bmN0aW9uCisKKyAgICBUaGlzIHBhdGNoIG1vdmVzIHRoZSBjaGVjaywgaWYgYSBkZXZpY2Ugc2hvdWxkIGJlIHNraXBwZWQgaW4gUENJIFBOUAorICAgIGNvbmZpZ3VyYXRpb24gaW50byB0aGUgZnVuY3Rpb24gcGNpX3NraXBfZGV2KCkuIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZAorICAgIGFzIHdlYWsgc28gdGhhdCBpdCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgYSBwbGF0Zm9ybSBzcGVjaWZpYyBvbmUgaWYKKyAgICBuZWVkZWQuIFRoZSBjaGVjayBpZiB0aGUgZGV2aWNlIHNob3VsZCBnZXQgcHJpbnRlZCBpbiB0aGUgUENJIHN1bW1hcnkgdXBvbgorICAgIGJvb3R1cCAod2hlbiBDT05GSUdfUENJX1NDQU5fU0hPVyBpcyBkZWZpbmVkKSBpcyBtb3ZlZCB0byB0aGUgZnVuY3Rpb24KKyAgICBwY2lfcHJpbnRfZGV2KCkgd2hpY2ggaXMgYWxzbyBkZWZpbmVkIGFzIHdlYWsgdG9vLgorCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgYjAwMjE0NGUxZGMyMTM3NGIxZWY1MjgxZmU2YjVkMDE0YWY5NjY1MAorQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglUaHUgSnVsIDEwIDA5OjU4OjA2IDIwMDggKzAyMDAKKworICAgIHBwYzR4eDogRml4IHByaW50ZiBmb3JtYXQgd2FybmluZ3Mgbm93IHZpc2libGUgd2l0aCB0aGUgdXBkYXRlZCBmb3JtYXQgY2hlY2sKKworICAgIFRoaXMgcGF0Y2ggZml4ZXMgcHBjNHh4IHJlbGF0ZWQgcHJpbnRmIGZvcm1hdCB3YXJuaW5nLiBUaG9zZSB3YXJuaW5ncyBhcmUKKyAgICBub3cgdmlzaWJsZSBzaW5jZSBwYXRjaCBkYzRiMGIzOGQ0YWFkZjA4ODI2ZjZjMzEyNzBmMWVlY2QyNzk2NGZkCisgICAgW0ZpeCBwcmludGYgZXJyb3JzLl0gYnkgQW5kcmV3IEtsb3NzbmVyIGhhcyBiZWVuIGFwcGxpZWQuIFRoYW5rcywgdGhpcyBpcworICAgIHJlYWxseSBoZWxwZnVsLgorCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgNWQ4MTJiOGI0YWQ5NjY3Yzc3YTViZjkyYjRiYTgxNjk5YWJjOWZjMworQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglXZWQgSnVsIDkgMTc6MzM6NTcgMjAwOCArMDIwMAorCisgICAgcHBjNHh4OiBFbmFibGUgc3VwcG9ydCBmb3IgPiAyR0IgU0RSQU0gb24gQU1DQyBLYXRtYWkKKworICAgIE5ld2VyIFBQQydzIGxpa2UgNDQwU1BlLCA0NjBFWC9HVCBjYW4gYmUgZXF1aXBwZWQgd2l0aCBtb3JlIHRoYW4gMkdCIG9mIFNEUkFNLgorICAgIFRvIHN1cHBvcnQgc3VjaCBjb25maWd1cmF0aW9ucywgd2UgIm9ubHkiIG1hcCB0aGUgZmlyc3QgMkdCIHZpYSB0aGUgVExCJ3MuIFdlCisgICAgbmVlZCBzb21lIGZyZWUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvciB0aGUgcmVtYWluaW5nIHBlcmlwaGVyYWxzIGxpa2UsIFNvQworICAgIGRldmljZXMsIEZMQVNIIGV0Yy4KKworICAgIE5vdGUgdGhhdCBFQ0MgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gY29uZmlndXJhdGlvbnMgd2l0aCBtb3JlIHRoYW4gMkdCCisgICAgU0RSQU0uIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IG1hcCB0aGUgZmlyc3QgMkdCIG9uIHN1Y2ggc3lzdGVtcywgYW5kIHRoZXJlZm9yZQorICAgIHRoZSBFQ0MgcGFyaXR5IGJ5dGUgb2YgdGhlIHJlbWFpbmluZyBhcmVhIGNhbid0IGJlIHdyaXR0ZW4uCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCBjZjFjMmVkOTFkZjI2OTAzYjk1Njk0OGYzN2Y4MmRlOWUxMTU4YTg5CitBdXRob3I6IExhcnJ5IEpvaG5zb24gPGxyakBhY20ub3JnPgorRGF0ZToJU2F0IEp1biAxNCAxNzowMjo0OSAyMDA4IC0wNDAwCisKKyAgICBwcGM0eHg6IFJlbW92ZSBpbXBsZW1lbnRhdGlvbiBvZiB0ZXN0ZHJhbSgpIGZyb20gS29yYXQgYm9hcmQgc3VwcG9ydAorCisgICAgU2lnbmVkLW9mZi1ieTogTGFycnkgSm9obnNvbiA8bHJqQGFjbS5vcmc+CisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgNDdjZTRhMjhjY2ZjZmI4MDNhYTY4ZDNkNDUwNWE4ZGUwNTZhOGE1ZQorQXV0aG9yOiBMYXJyeSBKb2huc29uIDxscmpAYWNtLm9yZz4KK0RhdGU6CVNhdCBKdW4gMTQgMTY6NTM6MDIgMjAwOCAtMDQwMAorCisgICAgcHBjNHh4OiBVcGRhdGUgYW5kIGFkZCBGRFQgdG8gS29yYXQgYm9hcmQgc3VwcG9ydAorCisgICAgU2lnbmVkLW9mZi1ieTogTGFycnkgSm9obnNvbiA8bHJqQGFjbS5vcmc+CisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgNDE4OGYwNDkxODg2YjNiNDg2MTY0ZTgxOWMwYTgzZmRiOTdlZmQ3ZAorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJVGh1IEp1bCAxMCAwMToxMzozMCAyMDA4ICswMjAwCisKKyAgICBNaW5vciBjb2Rpbmcgc3R5bGUgY2xlYW51cDsgdXBkYXRlIENIQU5HRUxPRworCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKwogY29tbWl0IDg5MTVmMTE4OWMxZDI5ZDhiZTdmNGRlMzI1NzAyZDkwYTg5ODgyMTkKIEF1dGhvcjogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CiBEYXRlOglXZWQgSnVsIDkgMTc6NTA6NDUgMjAwOCAtMDQwMApAQCAtMjg1LDYgKzEzNTEsMTkgQEAKIAogICAgIFNpZ25lZC1vZmYtYnk6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KIAorY29tbWl0IDM0NzNhYjczNzI4MmIwOGFkNjE4NDFmY2JiMTRjNGQyNjRhOTNhOGUKK0F1dGhvcjogSmFzb24gSmluIDxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVR1ZSBNYXkgMTMgMTE6NTA6MzYgMjAwOCArMDgwMAorCisgICAgRmVlZCB0aGUgd2F0Y2hkb2cgaW4gdS1ib290IGZvciA4NjEwIGJvYXJkLgorCisgICAgVGhlIHdhdGNoZG9nIG9uIDg2MTAgYm9hcmQgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHN3WzZdCisgICAgdG8gb24uIE9uY2UgZW5hYmxlZCwgdGhlIHdhdGNoZG9nIGNhbiBub3QgYmUgZGlzYWJsZWQKKyAgICBieSBzb2Z0d2FyZS4gU28gZmVlZCB0aGUgZG9nIGluIHUtYm9vdCBpcyBuZWNlc3NhcnkgZm9yCisgICAgbm9ybWFsIG9wZXJhdGlvbi4KKworICAgIFNpZ25lZC1vZmYtYnk6IEphc29uIEppbiA8SmFzb24uamluQGZyZWVzY2FsZS5jb20+CisKIGNvbW1pdCA2MzY3Njg0MWNhMmQ2MDNiMTM3NjVmM2Y3YjcyZmYxYTYxYzIzZjkwCiBBdXRob3I6IEh1Z28gVmlsbGVuZXV2ZSA8aHVnby52aWxsZW5ldXZlQGx5cnRlY2guY29tPgogRGF0ZToJV2VkIEp1biAxOCAxMjoxMDozMyAyMDA4IC0wNDAwCkBAIC03NDgsNiArMTgyNywxOCBAQAogICAgIFNpZ25lZC1vZmYtYnk6IEp1ZXJnZW4gS2lsYiA8Si5LaWxiQGdteC5kZT4KICAgICBBY2tlZC1ieTogRmVsaXggUmFkZW5za3kgPGZlbGl4QGVtYmVkZGVkLXNvbC5jb20+CiAKK2NvbW1pdCBkZDFjNTUyM2Q2ZjQ0ZTg0MmU2OWYyZmNiNTA3ODhjNjA2MGVhYjg2CitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVR1ZSBKdWwgMSAxNzowMzoxOSAyMDA4ICswMjAwCisKKyAgICBwcGM0eHg6IEZpeCA0NjBFWC9HVCBQQ0llIHBvcnQgaW5pdGlhbGl6YXRpb24KKworICAgIFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIDQ2MEVYL0dUIFBDSWUgVVRMU0VUMSByZWdpc3RlciB3YXMKKyAgICBjb25maWd1cmVkIGluY29ycmVjdGx5LiBUaGFua3MgdG8gT2xnYSBCdWNob25pbmEgZnJvbSBBTUNDIGZvciBwb2ludGluZworICAgIHRoaXMgb3V0LgorCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCiBjb21taXQgYjU3MWFmZGUwMjk1YjAwN2E0NTA1NWVlNDlmODgyMmM3NTNhNTY1MQogQXV0aG9yOiBKZWFuLUNocmlzdG9waGUgUExBR05JT0wtVklMTEFSRCA8cGxhZ25pb2pAamNyb3NvZnQuY29tPgogRGF0ZToJU2F0IEp1biA3IDEyOjI5OjUyIDIwMDggKzAyMDAKQEAgLTExMjksNiArMjIyMCwyMiBAQAogICAgIEFja2VkLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiAgICAgQWNrZWQtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CiAKK2NvbW1pdCBhMDM2YjA0NDM2NTdmZTBmNDc3Mzc4NmRlOTA5MjI1MTg2OWYwOGFjCitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglUaHUgSnVuIDE5IDAxOjQ1OjUwIDIwMDggLTA1MDAKKworICAgIE1QQzg2MTBIUENEOiBSZXBvcnQgYm9hcmQgaWQsIGJvYXJkIHZlcnNpb24gYW5kIGZwZ2EgdmVyc2lvbi4KKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCA3ZGU4YzIxZjE0ZGY5YzIwZmRjZjYwMjdhZWM4ZTg1NDVmNzVmODM1CitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglUaHUgSnVuIDE5IDAxOjQ1OjI3IDIwMDggLTA1MDAKKworICAgIE1QQzg2NDFIUENOOiBSZXBvcnQgYm9hcmQgaWQsIGJvYXJkIHZlcnNpb24gYW5kIGZwZ2EgdmVyc2lvbi4KKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKIGNvbW1pdCBmYjhjMDYxZWEwNWZjNjhkMzdlMmE4YjlmOGM5NDlkNzZjOGQ3MWE4CiBBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KIERhdGU6CU1vbiBKdW4gMTYgMTA6NDA6MDIgMjAwOCArMDIwMApkaWZmIC0tZ2l0IGEvQ1JFRElUUyBiL0NSRURJVFMKaW5kZXggM2I2ZTU3ZC4uMmIwZGFiNyAxMDA2NDQKLS0tIGEvQ1JFRElUUworKysgYi9DUkVESVRTCkBAIC00MjYsNyArNDI2LDcgQEAKIAogTjogQW5kcmUgU2Nod2FyegogRTogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlCi1EOiBTdXBwb3J0IGZvciBNYXRyaXggVmlzaW9uIGJvYXJkcyAoTVZCTE03KQorRDogU3VwcG9ydCBmb3IgTWF0cml4IFZpc2lvbiBib2FyZHMgKE1WQkxNNy9NVkJDX1ApCiAKIE46IFJvYmVydCBTY2h3ZWJlbAogRTogci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBhM2Q3MGIxLi5jYmU1YzQ3IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTQsMjYxICsxNCwyNjAgQEAKICMgUG93ZXJQQyBTeXN0ZW1zOgkJCQkJCQkjCiAjCQkJCQkJCQkJIwogIyBNYWludGFpbmVyIE5hbWUsIEVtYWlsIEFkZHJlc3MJCQkJCSMKLSMJQm9hcmQJCQlDUFUJCQkJCSMKKyMJQm9hcmQJCUNQVQkJCQkJCSMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogR3JlZyBBbGxlbiA8Z2FsbGVuQGFybHV0LnV0ZXhhcy5lZHU+CiAKLQlVVFg4MjQ1CQkJTVBDODI0NQorCVVUWDgyNDUJCU1QQzgyNDUKIAogUGFudGVsaXMgQW50b25pb3UgPHBhbnRvQGludHJhY29tLmdyPgogCi0JTkVUVklBCQkJTVBDOHh4CisJTkVUVklBCQlNUEM4eHgKIAogUmVpbmhhcmQgQXJsdCA8cmVpbmhhcmQuYXJsdEBlc2QtZWxlY3Ryb25pY3MuY29tPgogCi0JY3BjaTUyMDAJCU1QQzUyMDAKLQltZWNwNTIwMAkJTVBDNTIwMAotCXBmNTIwMAkJCU1QQzUyMDAKKwljcGNpNTIwMAlNUEM1MjAwCisJbWVjcDUyMDAJTVBDNTIwMAorCXBmNTIwMAkJTVBDNTIwMAogCi0JQ1BDSTc1MAkJCVBQQzc1MEZYL0dYCisJQ1BDSTc1MAkJUFBDNzUwRlgvR1gKIAogWXVsaSBCYXJjb2hlbiA8eXVsaUBhcmFiZWxsYXN3LmNvbT4KIAotCUFkZGVyCQkJTVBDODd4L01QQzg1MlQKLQllcDgyNDgJCQlNUEM4MjQ4Ci0JSVNQQU4JCQlNUEM4MjYwCi0JTVBDODI2MEFEUwkJTVBDODI2eC9NUEM4Mjd4L01QQzgyODAKLQlSYXR0bGVyCQkJTVBDODI0OAotCVpQQzE5MDAJCQlNUEM4MjY1CisJQWRkZXIJCU1QQzg3eC9NUEM4NTJUCisJZXA4MjQ4CQlNUEM4MjQ4CisJSVNQQU4JCU1QQzgyNjAKKwlNUEM4MjYwQURTCU1QQzgyNngvTVBDODI3eC9NUEM4MjgwCisJUmF0dGxlcgkJTVBDODI0OAorCVpQQzE5MDAJCU1QQzgyNjUKIAogTWljaGFlbCBCYXJrb3dza2kgPG1pY2hhZWwuYmFya293c2tpQGZyZWVzY2FsZS5jb20+CiAKLQlNUEM4MzIzRVJEQgkJTVBDODMyMworCU1QQzgzMjNFUkRCCU1QQzgzMjMKIAogSmVycnkgVmFuIEJhcmVuIDxnZXJhbGQudmFuYmFyZW5Ac21pdGhzLWFlcm9zcGFjZS5jb20+CiAKLQlzYWNzbmcJCQlNUEM4MjYwCisJc2Fjc25nCQlNUEM4MjYwCiAKIE9saXZlciBCcm93biA8b2Jyb3duQGFkdmVudG5ldHdvcmtzLmNvbT4KIAotCWd3ODI2MAkJCU1QQzgyNjAKKwlndzgyNjAJCU1QQzgyNjAKIAogQ29ubiBDbGFyayA8Y2xhcmtAZXN0ZWVtLmNvbT4KIAotCUVTVEVFTTE5MkUJCU1QQzh4eAorCUVTVEVFTTE5MkUJTVBDOHh4CiAKIEpvZSBEJ0FiYnJhY2NpbyA8bGpkMDE1QGZyZWVzY2FsZS5jb20+CiAKLQlNUEM4Mzd4RVJEQgkJTVBDODM3eAorCU1QQzgzN3hFUkRCCU1QQzgzN3gKIAogS+FyaSBEYXbt8HNzb24gPGtkQGZsYWdhLmlzPgogCi0JRkxBR0FETQkJCU1QQzgyMworCUZMQUdBRE0JCU1QQzgyMwogCiBUb3JzdGVuIERlbWtlIDx0b3JzdGVuLmRlbWtlQGZjaS5jb20+CiAKLQllWGFsaW9uCQkJTVBDODI0eAorCWVYYWxpb24JCU1QQzgyNHgKIAogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KIAotCUljZUN1YmVfNTEwMAkJTUdUNTEwMAotCUljZUN1YmVfNTIwMAkJTVBDNTIwMAorCUljZUN1YmVfNTEwMAlNR1Q1MTAwCisJSWNlQ3ViZV81MjAwCU1QQzUyMDAKIAotCUFNWDg2MAkJCU1QQzg2MAotCUVUWDA5NAkJCU1QQzg1MAotCUZQUzg1MEwJCQlNUEM4NTAKLQlGUFM4NjBMCQkJTVBDODYwCi0JSUNVODYyCQkJTVBDODYyCi0JSVA4NjAJCQlNUEM4NjAKLQlJVk1MMjQJCQlNUEM4NjAKLQlJVk1MMjRfMTI4CQlNUEM4NjAKLQlJVk1MMjRfMjU2CQlNUEM4NjAKLQlJVk1TOAkJCU1QQzg2MAotCUlWTVM4XzEyOAkJTVBDODYwCi0JSVZNUzhfMjU2CQlNUEM4NjAKLQlMQU5URUMJCQlNUEM4NTAKLQlMV01PTgkJCU1QQzgyMwotCU5DNjUwCQkJTVBDODUyCi0JUjM2ME1QSQkJCU1QQzgyMwotCVJNVQkJCU1QQzg1MAotCVJSdmlzaW9uCQlNUEM4MjMKLQlTTTg1MAkJCU1QQzg1MAotCVNQRDgyM1RTCQlNUEM4MjMKLQlUUU04MjNMCQkJTVBDODIzCi0JVFFNODIzTF9MQ0QJCU1QQzgyMwotCVRRTTg1MEwJCQlNUEM4NTAKLQlUUU04NTVMCQkJTVBDODU1Ci0JVFFNODYwTAkJCU1QQzg2MAotCVRRTTg2MExfRkVDCQlNUEM4NjAKLQljMm1vbgkJCU1QQzg1NQotCWhlcm1lcwkJCU1QQzg2MAotCWx3bW9uCQkJTVBDODIzCi0JcGN1X2UJCQlNUEM4NTUKKwlBTVg4NjAJCU1QQzg2MAorCUVUWDA5NAkJTVBDODUwCisJRlBTODUwTAkJTVBDODUwCisJRlBTODYwTAkJTVBDODYwCisJSUNVODYyCQlNUEM4NjIKKwlJUDg2MAkJTVBDODYwCisJSVZNTDI0CQlNUEM4NjAKKwlJVk1MMjRfMTI4CU1QQzg2MAorCUlWTUwyNF8yNTYJTVBDODYwCisJSVZNUzgJCU1QQzg2MAorCUlWTVM4XzEyOAlNUEM4NjAKKwlJVk1TOF8yNTYJTVBDODYwCisJTEFOVEVDCQlNUEM4NTAKKwlMV01PTgkJTVBDODIzCisJTkM2NTAJCU1QQzg1MgorCVIzNjBNUEkJCU1QQzgyMworCVJNVQkJTVBDODUwCisJUlJ2aXNpb24JTVBDODIzCisJU004NTAJCU1QQzg1MAorCVNQRDgyM1RTCU1QQzgyMworCVRRTTgyM0wJCU1QQzgyMworCVRRTTgyM0xfTENECU1QQzgyMworCVRRTTg1MEwJCU1QQzg1MAorCVRRTTg1NUwJCU1QQzg1NQorCVRRTTg2MEwJCU1QQzg2MAorCVRRTTg2MExfRkVDCU1QQzg2MAorCWMybW9uCQlNUEM4NTUKKwloZXJtZXMJCU1QQzg2MAorCWx3bW9uCQlNUEM4MjMKKwlwY3VfZQkJTVBDODU1CiAKLQlDVTgyNAkJCU1QQzgyNDAKLQlTYW5kcG9pbnQ4MjQwCQlNUEM4MjQwCi0JU0w4MjQ1CQkJTVBDODI0NQorCUNVODI0CQlNUEM4MjQwCisJU2FuZHBvaW50ODI0MAlNUEM4MjQwCisJU0w4MjQ1CQlNUEM4MjQ1CiAKLQlBVEMJCQlNUEM4MjUwCi0JUE04MjUJCQlNUEM4MjUwCisJQVRDCQlNUEM4MjUwCisJUE04MjUJCU1QQzgyNTAKIAotCVRRTTgyNTUJCQlNUEM4MjU1CisJVFFNODI1NQkJTVBDODI1NQogCi0JQ1BVODYJCQlNUEM4MjYwCi0JUE04MjYJCQlNUEM4MjYwCi0JVFFNODI2MAkJCU1QQzgyNjAKKwlDUFU4NgkJTVBDODI2MAorCVBNODI2CQlNUEM4MjYwCisJVFFNODI2MAkJTVBDODI2MAogCi0JUDNHNAkJCU1QQzc0MTAKKwlQM0c0CQlNUEM3NDEwCiAKLQlQQ0lQUEMyCQkJTVBDNzUwCi0JUENJUFBDNgkJCU1QQzc1MAorCVBDSVBQQzIJCU1QQzc1MAorCVBDSVBQQzYJCU1QQzc1MAogCi0JRVhCSVRHRU4JCVBQQzQwNUdQCisJRVhCSVRHRU4JUFBDNDA1R1AKIAogSm9uIERpZWtlbWEgPGpvbi5kaWVrZW1hQHNtaXRocy1hZXJvc3BhY2UuY29tPgogCi0Jc2JjODI2MAkJCU1QQzgyNjAKKwlzYmM4MjYwCQlNUEM4MjYwCiAKIERhdmUgRWxsaXMgPERHRUBzaXhuZXRpby5jb20+CiAKLQlTWE5JODU1VAkJTVBDOHh4CisJU1hOSTg1NVQJTVBDOHh4CiAKIFRob21hcyBGcmllZGVuIDxUaG9tYXNGQGh5cGVyaW9uLWVudGVydGFpbm1lbnQuY29tPgogCi0JQW1pZ2FPbmVHM1NFCQlNUEM3eHgKKwlBbWlnYU9uZUczU0UJTVBDN3h4CiAKIE1hdHRoaWFzIEZ1Y2hzIDxtYXR0aGlhcy5mdWNoc0Blc2QtZWxlY3Ryb25pY3MuY29tPgogCi0JQURDSU9QCQkJSU9QNDgwIChQUEM0MDEpCi0JQVBDNDA1CQkJUFBDNDA1R1AKLQlBUjQwNQkJCVBQQzQwNUdQCi0JQVNINDA1CQkJUFBDNDA1RVAKLQlDQU5CVAkJCVBQQzQwNUNSCi0JQ1BDSTJEUAkJCVBQQzQwNUdQCi0JQ1BDSTQwNQkJCVBQQzQwNUdQCi0JQ1BDSTQwNTIJCVBQQzQwNUdQCi0JQ1BDSTQwNUFCCQlQUEM0MDVHUAotCUNQQ0k0MDVEVAkJUFBDNDA1R1AKLQlDUENJSVNFUjQJCVBQQzQwNUdQCi0JREFTQV9TSU0JCUlPUDQ4MCAoUFBDNDAxKQotCURQNDA1CQkJUFBDNDA1RVAKLQlEVTQwNQkJCVBQQzQwNUdQCi0JRFU0NDAJCQlQUEM0NDBFUHgKLQlHMjAwMAkJCVBQQzQwNUVQCi0JSEg0MDUJCQlQUEM0MDVFUAotCUhVQjQwNQkJCVBQQzQwNUVQCi0JT0NSVEMJCQlQUEM0MDVHUAotCU9SU0cJCQlQUEM0MDVHUAotCVBDSTQwNQkJCVBQQzQwNUdQCi0JUExVNDA1CQkJUFBDNDA1RVAKLQlQTUM0MDUJCQlQUEM0MDVHUAotCVBNQzQ0MAkJCVBQQzQ0MEVQeAotCVZPSDQwNQkJCVBQQzQwNUVQCi0JVk9NNDA1CQkJUFBDNDA1RVAKLQlXVUg0MDUJCQlQUEM0MDVFUAotCUNNUzcwMAkJCVBQQzQwNUVQCisJQURDSU9QCQlJT1A0ODAgKFBQQzQwMSkKKwlBUEM0MDUJCVBQQzQwNUdQCisJQVI0MDUJCVBQQzQwNUdQCisJQVNINDA1CQlQUEM0MDVFUAorCUNBTkJUCQlQUEM0MDVDUgorCUNQQ0kyRFAJCVBQQzQwNUdQCisJQ1BDSTQwNQkJUFBDNDA1R1AKKwlDUENJNDA1MglQUEM0MDVHUAorCUNQQ0k0MDVBQglQUEM0MDVHUAorCUNQQ0k0MDVEVAlQUEM0MDVHUAorCUNQQ0lJU0VSNAlQUEM0MDVHUAorCURBU0FfU0lNCUlPUDQ4MCAoUFBDNDAxKQorCURQNDA1CQlQUEM0MDVFUAorCURVNDA1CQlQUEM0MDVHUAorCURVNDQwCQlQUEM0NDBFUHgKKwlHMjAwMAkJUFBDNDA1RVAKKwlISDQwNQkJUFBDNDA1RVAKKwlIVUI0MDUJCVBQQzQwNUVQCisJT0NSVEMJCVBQQzQwNUdQCisJT1JTRwkJUFBDNDA1R1AKKwlQQ0k0MDUJCVBQQzQwNUdQCisJUExVNDA1CQlQUEM0MDVFUAorCVBNQzQwNQkJUFBDNDA1R1AKKwlQTUM0NDAJCVBQQzQ0MEVQeAorCVZPSDQwNQkJUFBDNDA1RVAKKwlWT000MDUJCVBQQzQwNUVQCisJV1VINDA1CQlQUEM0MDVFUAorCUNNUzcwMAkJUFBDNDA1RVAKIAogTmlrbGF1cyBHaWdlciA8bmlrbGF1cy5naWdlckBuZXRzdGFsLmNvbT4KIAotCUhDVTQJCQlQUEM0MDVHUHIKLQlNQ1UyNQkJCVBQQzQwNUdQcgotCUhDVTUJCQlQUEM0NDBFUHgKKwlIQ1U0CQlQUEM0MDVHUHIKKwlNQ1UyNQkJUFBDNDA1R1ByCisJSENVNQkJUFBDNDQwRVB4CiAKIEZyYW5rIEdvdHRzY2hsaW5nIDxmZ290dHNjaGxpbmdAZWx0ZWMuZGU+CiAKLQlNSFBDCQkJTVBDOHh4CisJTUhQQwkJTVBDOHh4CiAKLQlCQUI3eHgJCQlNUEM3NDAvTVBDNzUwCisJQkFCN3h4CQlNUEM3NDAvTVBDNzUwCiAKIFdvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGRlbnguZGU+CiAKLQlDQ00JCQlNUEM4NTUKKwlDQ00JCU1QQzg1NQogCi0JUE42MgkJCU1QQzgyNDAKLQotCUlQSEFTRTQ1MzkJCU1QQzgyNjAKLQlTQ00JCQlNUEM4MjYwCisJUE42MgkJTVBDODI0MAorCUlQSEFTRTQ1MzkJTVBDODI2MAorCVNDTQkJTVBDODI2MAogCiBIb3dhcmQgR3JheSA8bXZzZW5zb3JAbWF0cml4LXZpc2lvbi5kZT4KIAotCU1WUzEJCQlNUEM4MjMKKwlNVlMxCQlNUEM4MjMKIAogSm9lIEhhbW1hbiA8am9lLmhhbW1hbkBlbWJlZGRlZHNwZWNpYWx0aWVzLmNvbT4KIAotCXNiYzg1NDgJCQlNUEM4NTQ4Ci0Jc2JjODY0MWQJCU1QQzg2NDFECisJc2JjODU0OAkJTVBDODU0OAorCXNiYzg2NDFkCU1QQzg2NDFECiAKIEtsYXVzIEhleWRlY2sgPGhleWRlY2tAa2llYmFjay1wZXRlci5kZT4KIAotCUtVUDRLCQkJTVBDODU1Ci0JS1VQNFgJCQlNUEM4NTkKKwlLVVA0SwkJTVBDODU1CisJS1VQNFgJCU1QQzg1OQogCiBHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueC5kZT4KIAotCXF1YWQxMDBoZAkJUFBDNDA1RVAKKwlxdWFkMTAwaGQJUFBDNDA1RVAKIAogTXVycmF5IEplbnNlbiA8TXVycmF5LkplbnNlbkBjc2lyby5hdT4KIAotCWNvZ2VudF9tcGM4eHgJCU1QQzh4eAorCWNvZ2VudF9tcGM4eHgJTVBDOHh4CiAKLQljb2dlbnRfbXBjODI2MAkJTVBDODI2MAotCWh5bW9kCQkJTVBDODI2MAorCWNvZ2VudF9tcGM4MjYwCU1QQzgyNjAKKwloeW1vZAkJTVBDODI2MAogCiBMYXJyeSBKb2huc29uIDxscmpAYWNtLm9yZz4KIAotCWtvcmF0CQkJUFBDNDQwRVB4CisJa29yYXQJCVBQQzQ0MEVQeAogCiBCcmFkIEtlbXAgPEJyYWQuS2VtcEBzZXJhbm9hLmNvbT4KIAotCXBwbWM4MjYwCQlNUEM4MjYwCisJcHBtYzgyNjAJTVBDODI2MAogCiBTYW5nbW9vbiBLaW0gPGRvZ29pbEBldGluc3lzLmNvbT4KIAotCWRlYnJpcwkJCU1QQzgyNDUKLQlLVk1FMDgwCQkJTVBDODI0NQorCWRlYnJpcwkJTVBDODI0NQorCUtWTUUwODAJCU1QQzgyNDUKIAogVGhvbWFzIExhbmdlIDx0aG9tYXNAY29yZWxhdHVzLnNlPgogCi0JR1RICQkJTVBDODYwCisJR1RICQlNUEM4NjAKIAogUm9iZXJ0IExhemFyc2tpIDxyb2JlcnRsYXphcnNraUBnbWFpbC5jb20+CiAKLQlBVFVNODU0OAkJTVBDODU0OAorCUFUVU04NTQ4CU1QQzg1NDgKIAogVGhlIExFT1ggdGVhbSA8dGVhbUBsZW94Lm9yZz4KIAotCUVMUFQ4NjAJCQlNUEM4NjBUCisJRUxQVDg2MAkJTVBDODYwVAogCiBEYXZlIExpdSA8ZGF2ZWxpdUBmcmVlc2NhbGUuY29tPgogCi0JTVBDODMxNUVSREIJCU1QQzgzMTUKLQlNUEM4MzJYRU1EUwkJTVBDODMyeAotCU1QQzgzNjBFTURTCQlNUEM4MzYwCi0JTVBDODM3WEVNRFMJCU1QQzgzN3gKKwlNUEM4MzE1RVJEQglNUEM4MzE1CisJTVBDODMyWEVNRFMJTVBDODMyeAorCU1QQzgzNjBFTURTCU1QQzgzNjAKKwlNUEM4MzdYRU1EUwlNUEM4Mzd4CiAKIE55ZSBMaXUgPG55ZXRAenVtYW5ldHdvcmtzLmNvbT4KIAotCVpVTUEJCQlNUEM3eHhfNzR4eAorCVpVTUEJCU1QQzd4eF83NHh4CiAKIEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLQlNUEM4NTQwQURTCQlNUEM4NTQwCi0JTVBDODU2MEFEUwkJTVBDODU2MAotCU1QQzg1NDFDRFMJCU1QQzg1NDEKLQlNUEM4NTU1Q0RTCQlNUEM4NTU1CisJTVBDODU0MEFEUwlNUEM4NTQwCisJTVBDODU2MEFEUwlNUEM4NTYwCisJTVBDODU0MUNEUwlNUEM4NTQxCisJTVBDODU1NUNEUwlNUEM4NTU1CiAKLQlNUEM4NjQxSFBDTgkJTVBDODY0MUQKKwlNUEM4NjQxSFBDTglNUEM4NjQxRAogCiBEYW4gTWFsZWsgPGRhbkBlbWJlZGRlZGFsbGV5LmNvbT4KIAotCXN0eGdwMwkJCU1QQzg1eHgKLQlzdHhzc2EJCQlNUEM4NXh4Ci0Jc3R4eHRjCQkJTVBDOHh4CisJc3R4Z3AzCQlNUEM4NXh4CisJc3R4c3NhCQlNUEM4NXh4CisJc3R4eHRjCQlNUEM4eHgKIAogRXJhbiBNYW4gPGVyYW5AbmJhc2UuY28uaWw+CiAKLQlFVkI2NDI2MF83NTBDWAkJTVBDNzUwQ1gKKwlFVkI2NDI2MF83NTBDWAlNUEM3NTBDWAogCiBBbmRyZWEgImxsYW5kcmUiIE1hcnNvbiA8YW5kcmVhLm1hcnNvbkBkYXZlLXRlY2guaXQ+CiAKQEAgLTI3Niw3NSArMjc1LDc1IEBACiAKIFJlaW5oYXJkIE1leWVyIDxyLm1leWVyQGVtay1lbGVrdHJvbmlrLmRlPgogCi0JVE9QODYwCQkJTVBDODYwVAotCVRPUDUyMDAJCQlNUEM1MjAwCisJVE9QODYwCQlNUEM4NjBUCisJVE9QNTIwMAkJTVBDNTIwMAogCiBUb2x1bmF5IE9ya3VuIDx0b3JrdW5AbmV4dGlvLmNvbT4KIAotCWNzYjI3MgkJCVBQQzQwNUdQCi0JY3NiNDcyCQkJUFBDNDA1R1AKKwljc2IyNzIJCVBQQzQwNUdQCisJY3NiNDcyCQlQUEM0MDVHUAogCiBKb2huIE90a2VuIDxqb3RrZW5Ac29mdGFkdmFuY2VzLmNvbT4KIAotCWx1YW4JCQlQUEM0NDBTUAotCXRhaWh1CQkJUFBDNDA1RVAKKwlsdWFuCQlQUEM0NDBTUAorCXRhaWh1CQlQUEM0MDVFUAogCiBLZWl0aCBPdXR3YXRlciA8S2VpdGhfT3V0d2F0ZXJAbXZpcy5jb20+CiAKLQlHRU44NjBUCQkJTVBDODYwVAotCUdFTjg2MFRfU0MJCU1QQzg2MFQKKwlHRU44NjBUCQlNUEM4NjBUCisJR0VOODYwVF9TQwlNUEM4NjBUCiAKIEZyYW5rIFBhbm5vIDxmcGFubm9AZGVscGhpbnRlY2guY29tPgogCi0JZXA4MjYwCQkJTVBDODI2MAorCWVwODI2MAkJTVBDODI2MAogCiBEZW5pcyBQZXRlciA8ZC5wZXRlckBtcGwuY2g+CiAKLQlNSVA0MDUJCQlQUEM0eHgKLQlQSVA0MDUJCQlQUEM0eHgKKwlNSVA0MDUJCVBQQzR4eAorCVBJUDQwNQkJUFBDNHh4CiAKIEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+CiAKLQlNUEM4MzQ5RU1EUwkJTVBDODM0OQorCU1QQzgzNDlFTURTCU1QQzgzNDkKIAogRGFuaWVsIFBvaXJvdCA8ZGFuLnBvaXJvdEB3aW5kcml2ZXIuY29tPgogCi0Jc2JjODI0MAkJCU1QQzgyNDAKLQlzYmM0MDUJCQlQUEM0MDVHUAorCXNiYzgyNDAJCU1QQzgyNDAKKwlzYmM0MDUJCVBQQzQwNUdQCiAKIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KIAotCVAzTTc0NDgJCQlNUEM3NDQ4CisJUDNNNzQ0OAkJTVBDNzQ0OAogCi0JdWMxMDAJCQlNUEM4NTcKKwl1YzEwMAkJTVBDODU3CiAKLQlUUU04NXh4CQkJTVBDODU0MC84NTQxLzg1NTUvODU2MAorCVRRTTg1eHgJCU1QQzg1NDAvODU0MS84NTU1Lzg1NjAKIAotCWFjYWRpYQkJCVBQQzQwNUVaCi0JYWxwcgkJCVBQQzQ0MEdYCi0JYmFtYm9vCQkJUFBDNDQwRVAKLQlidW5iaW5nYQkJUFBDNDA1RVAKLQljYW55b25sYW5kcwkJUFBDNDYwRVgKLQllYm9ueQkJCVBQQzQ0MEdQCi0JZ2xhY2llcgkJCVBQQzQ2MEdUCi0JaGFsZWFrYWxhCQlQUEM0MDVFWHIKLQlrYXRtYWkJCQlQUEM0NDBTUGUKLQlraWxhdWVhCQkJUFBDNDA1RVgKLQlsd21vbjUJCQlQUEM0NDBFUHgKLQltYWthbHUJCQlQUEM0MDVFWAotCW9jb3RlYQkJCVBQQzQ0MEdYCi0JcDNwNDQwCQkJUFBDNDQwR1AKLQlwY3M0NDBlcAkJUFBDNDQwRVAKLQlyYWluaWVyCQkJUFBDNDQwR1J4Ci0Jc2VxdW9pYQkJCVBQQzQ0MEVQeAotCXN5Y2Ftb3JlCQlQUEM0MDVHUHIKLQl0YWlzaGFuCQkJUFBDNDQwR1gKLQl3YWxudXQJCQlQUEM0MDVHUAotCXllbGxvd3N0b25lCQlQUEM0NDBHUgotCXlvc2VtaXRlCQlQUEM0NDBFUAotCXpldXMJCQlQUEM0MDVFUAorCWFjYWRpYQkJUFBDNDA1RVoKKwlhbHByCQlQUEM0NDBHWAorCWJhbWJvbwkJUFBDNDQwRVAKKwlidW5iaW5nYQlQUEM0MDVFUAorCWNhbnlvbmxhbmRzCVBQQzQ2MEVYCisJZWJvbnkJCVBQQzQ0MEdQCisJZ2xhY2llcgkJUFBDNDYwR1QKKwloYWxlYWthbGEJUFBDNDA1RVhyCisJa2F0bWFpCQlQUEM0NDBTUGUKKwlraWxhdWVhCQlQUEM0MDVFWAorCWx3bW9uNQkJUFBDNDQwRVB4CisJbWFrYWx1CQlQUEM0MDVFWAorCW9jb3RlYQkJUFBDNDQwR1gKKwlwM3A0NDAJCVBQQzQ0MEdQCisJcGNzNDQwZXAJUFBDNDQwRVAKKwlyYWluaWVyCQlQUEM0NDBHUngKKwlzZXF1b2lhCQlQUEM0NDBFUHgKKwlzeWNhbW9yZQlQUEM0MDVHUHIKKwl0YWlzaGFuCQlQUEM0NDBHWAorCXdhbG51dAkJUFBDNDA1R1AKKwl5ZWxsb3dzdG9uZQlQUEM0NDBHUgorCXlvc2VtaXRlCVBQQzQ0MEVQCisJemV1cwkJUFBDNDA1RVAKIAotCVAzTTc1MAkJCVBQQzc1MEZYL0dYL0dMCisJUDNNNzUwCQlQUEM3NTBGWC9HWC9HTAogCiBZdXNkaSBTYW50b3NvIDx5dXNkaV9zYW50b3NvQGFkYXB0ZWMuY29tPgogCkBAIC0zNTIsNDA0ICszNTEsNDA1IEBACiAKIFRyYXZpcyBTYXd5ZXIgKHRyYXZpcy5zYXd5ZXJAc2FuZGJ1cnN0LmNvbT4KIAotCUtBUkVGCQkJUFBDNDQwR1gKLQlNRVRST0JPWAkJUFBDNDQwR1gKLQlYUEVESVRFMUsJCVBQQzQ0MEdYCisJS0FSRUYJCVBQQzQ0MEdYCisJTUVUUk9CT1gJUFBDNDQwR1gKKwlYUEVESVRFMUsJUFBDNDQwR1gKIAogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CiAKLQlpZHM4MjQ3CQkJTVBDODI0NwotCWp1cGl0ZXIJCQlNUEM1MjAwCi0JbWdjb2dlCQkJTVBDODI0NwotCW1nc3V2ZAkJCU1QQzg1MgotCW11bmljc2UJCQlNUEM1MjAwCi0Jc2MzCQkJUFBDNDA1R1AKLQl1YzEwMQkJCU1QQzUyMDAKKwlpZHM4MjQ3CQlNUEM4MjQ3CisJanVwaXRlcgkJTVBDNTIwMAorCW1nY29nZQkJTVBDODI0NworCW1nc3V2ZAkJTVBDODUyCisJbXVuaWNzZQkJTVBDNTIwMAorCXNjMwkJUFBDNDA1R1AKKwl1YzEwMQkJTVBDNTIwMAogCiAKIFBldGVyIERlIFNjaHJpanZlciA8cDJAbWluZC5iZT4KIAotCU1MMgkJCVBQQzR4eAorCU1MMgkJUFBDNHh4CiAKIEFuZHJlIFNjaHdhcnogPGFuZHJlLnNjaHdhcnpAbWF0cml4LXZpc2lvbi5kZT4KIAotCW12YmxtNwkJCU1QQzgzNDMKKwltdmJjX3AJCU1QQzUyMDAKKwltdmJsbTcJCU1QQzgzNDMKIAogVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4KIAotCU1QQzgzNDlFLW1JVFgJCU1QQzgzNDkKLQlNUEM4MzQ5RS1tSVRYLUdQCU1QQzgzNDkKKwlNUEM4MzQ5RS1tSVRYCU1QQzgzNDkKKwlNUEM4MzQ5RS1tSVRYLUdQIE1QQzgzNDkKIAogRXJpayBUaGVpc2VuIDxldGhlaXNlbkBtaW5kc3ByaW5nLmNvbT4KIAotCVc3T0xNQwkJCVBQQzR4eAotCVc3T0xNRwkJCVBQQzR4eAorCVc3T0xNQwkJUFBDNHh4CisJVzdPTE1HCQlQUEM0eHgKIAogSmltIFRob21wc29uIDxqaW1AbXVzZW5raS5jb20+CiAKLQlNVVNFTktJCQkJTVBDODI0NS84MjQxCi0JU2FuZHBvaW50ODI0NQkJTVBDODI0NQorCU1VU0VOS0kJCU1QQzgyNDUvODI0MQorCVNhbmRwb2ludDgyNDUJTVBDODI0NQogCiBSdW5lIFRvcmdlcnNlbiA8cnVuZXRAaW5ub3ZzeXMuY29tPgogCi0JTVBDODI2NkFEUwkJTVBDODI2NgorCU1QQzgyNjZBRFMJTVBDODI2NgogCiAKIERhdmlkIFVwZGVncmFmZiA8ZGF2ZUBjcmF5LmNvbT4KIAotCUNSQVlMMQkJCVBQQzR4eAorCUNSQVlMMQkJUFBDNHh4CiAKIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgogCi0JTVBDODM2MEVSREsJCU1QQzgzNjAKKwlNUEM4MzYwRVJESwlNUEM4MzYwCiAKIEpvc2VmIFdhZ25lciA8V2FnbmVyQE1pY3Jvc3lzLmRlPgogCi0JQ1BDNDUJCQlNUEM4MjQ1Ci0JUE01MjAJCQlNUEM1MjAwCisJQ1BDNDUJCU1QQzgyNDUKKwlQTTUyMAkJTVBDNTIwMAogCiBTdGVwaGVuIFdpbGxpYW1zIDxzdGV2ZUBpY2FydXMuY29tPgogCi0JSlNFCQkJUFBDNDA1R1ByCisJSlNFCQlQUEM0MDVHUHIKIAogSm9obiBaaGFuIDx6aGFuekBzaW5vdmVlLmNvbT4KIAotCXN2bV9zYzh4eAkJTVBDOHh4CisJc3ZtX3NjOHh4CU1QQzh4eAogCiBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KIAotCWxpbmtzdGF0aW9uCQlNUEM4MjQxCisJbGlua3N0YXRpb24JTVBDODI0MQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFVua25vd24gLyBvcnBoYW5lZCBib2FyZHM6CiAKLQlBRFM4NjAJCQlNUEM4eHgKLQlGQURTODIzCQkJTVBDOHh4Ci0JRkFEUzg1MFNBUgkJTVBDOHh4Ci0JRkFEUzg2MFQJCU1QQzh4eAotCUdFTklFVFYJCQlNUEM4eHgKLQlJQUQyMTAJCQlNUEM4eHgKLQlNQlgJCQlNUEM4eHgKLQlNQlg4NjBUCQkJTVBDOHh4Ci0JTlg4MjMJCQlNUEM4eHgKLQlSUFhDbGFzc2ljCQlNUEM4eHgKLQlSUFhsaXRlCQkJTVBDOHh4CisJQURTODYwCQlNUEM4eHgKKwlGQURTODIzCQlNUEM4eHgKKwlGQURTODUwU0FSCU1QQzh4eAorCUZBRFM4NjBUCU1QQzh4eAorCUdFTklFVFYJCU1QQzh4eAorCUlBRDIxMAkJTVBDOHh4CisJTUJYCQlNUEM4eHgKKwlNQlg4NjBUCQlNUEM4eHgKKwlOWDgyMwkJTVBDOHh4CisJUlBYQ2xhc3NpYwlNUEM4eHgKKwlSUFhsaXRlCQlNUEM4eHgKIAotCUVSSUMJCQlQUEM0eHgKKwlFUklDCQlQUEM0eHgKIAotCU1PVVNTRQkJCU1QQzgyNHgKKwlNT1VTU0UJCU1QQzgyNHgKIAotCVJQWHN1cGVyCQlNUEM4MjYwCi0JcnNkcHJvdG8JCU1QQzgyNjAKKwlSUFhzdXBlcglNUEM4MjYwCisJcnNkcHJvdG8JTVBDODI2MAogCi0JRVZCNjQyNjAJCU1QQzd4eF83NHh4CisJRVZCNjQyNjAJTVBDN3h4Xzc0eHgKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEFSTSBTeXN0ZW1zOgkJCQkJCQkJIwogIwkJCQkJCQkJCSMKICMgTWFpbnRhaW5lciBOYW1lLCBFbWFpbCBBZGRyZXNzCQkJCQkjCi0jCUJvYXJkCQkJQ1BVCQkJCQkjCisjCUJvYXJkCQlDUFUJCQkJCQkjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIFJvd2VsIEF0aWVuemEgPHJvd2VsQGRpd2FsYWJzLmNvbT4KIAotCWFybWFkaWxsbwkJQVJNNzIwVAorCWFybWFkaWxsbwlBUk03MjBUCiAKIFJpc2hpIEJoYXR0YWNoYXJ5YSA8cmlzaGlAdGkuY29tPgogCi0Jb21hcDU5MTJvc2sJCUFSTTkyNkVKUworCW9tYXA1OTEyb3NrCUFSTTkyNkVKUwogCiBDbGlmZiBCcmFrZSA8Y2xpZmYuYnJha2VAZ21haWwuY29tPgogCi0JcHhhMjU1X2lkcAkJeHNjYWxlCisJcHhhMjU1X2lkcAl4c2NhbGUKIAogUmljayBCcm9uc29uIDxyaWNrQGVmbi5vcmc+CiAKLQlBVDkxUk05MjAwREsJCWF0OTFybTkyMDAKKwlBVDkxUk05MjAwREsJYXQ5MXJtOTIwMAogCiBHZW9yZ2UgRy4gRGF2aXMgPGdkYXZpc0BtdmlzdGEuY29tPgogCi0JYXNzYWJldAkJCVNBMTEwMAotCWdjcGx1cwkJCVNBMTEwMAorCWFzc2FiZXQJCVNBMTEwMAorCWdjcGx1cwkJU0ExMTAwCiAKIFRob21hcyBFbHN0ZSA8aW5mb0BlbHN0ZS5vcmc+CiAKLQltb2RuZXQ1MAkJQVJNNzIwVCAoTkVUKzUwKQorCW1vZG5ldDUwCUFSTTcyMFQgKE5FVCs1MCkKIAogUGV0ZXIgRmlndWxpIDxwZXBvc2hAZXRjLnNrPgogCi0Jd2VwZXAyNTAJCXhzY2FsZQorCXdlcGVwMjUwCXhzY2FsZQogCiBNYXJpdXMgR3L2Z2VyIDxtYWdAc3lzZ28uZGU+CiAKLQlpbXBhNwkJCUFSTTcyMFQgKEVQNzIxMSkKLQllcDczMTIJCQlBUk03MjBUIChFUDczMTIpCisJaW1wYTcJCUFSTTcyMFQgKEVQNzIxMSkKKwllcDczMTIJCUFSTTcyMFQgKEVQNzMxMikKIAogS3NoaXRpaiBHdXB0YSA8a3NoaXRpakB0aS5jb20+CiAKLQlvbWFwMTUxMGlubgkJQVJNOTI1VAotCW9tYXAxNjEwaW5uCQlBUk05MjZFSlMKLQotS3lsZSBIYXJyaXMgPGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQ+Ci0KLQlsdWJib2NrCQkJeHNjYWxlCi0JY3JhZGxlCQkJeHNjYWxlCi0JaXhkcDQyNQkJCXhzY2FsZQorCW9tYXAxNTEwaW5uCUFSTTkyNVQKKwlvbWFwMTYxMGlubglBUk05MjZFSlMKIAogR2FyeSBKZW5uZWpvaG4gPGdqQGRlbnguZGU+CiAKLQlzbWRrMjQwMAkJQVJNOTIwVAotCXRyYWIJCQlBUk05MjBUCisJc21kazI0MDAJQVJNOTIwVAorCXRyYWIJCUFSTTkyMFQKIAogS29uc3RhbnRpbiBLbGV0c2Noa2UgPGtsZXRzY2hrZUBzeW5lcnRyb25peHguZGU+Ci0Jc2NiOTMyOAkJCUFSTTkyMFQKKwlzY2I5MzI4CQlBUk05MjBUCiAKIE5pc2hhbnQgS2FtYXQgPG5za2FtYXRAdGkuY29tPgogCi0Jb21hcDE2MTBoMgkJQVJNOTI2RUpTCisJb21hcDE2MTBoMglBUk05MjZFSlMKIAogU2VyZ2V5IEt1YnVzaHluIDxrc2lAa29pOC5uZXQ+CiAKLQlEVi1FVk0JCQlBUk05MjZFSlMKLQlTT05BVEEJCQlBUk05MjZFSlMKLQlTQ0hNT09HSUUJCUFSTTkyNkVKUworCURWLUVWTQkJQVJNOTI2RUpTCisJU09OQVRBCQlBUk05MjZFSlMKKwlTQ0hNT09HSUUJQVJNOTI2RUpTCiAKIFByYWthc2ggS3VtYXIgPHByYWthc2hAZW1iZWR4LmNvbT4KIAotCWNlcmYyNTAJCQl4c2NhbGUKKwljZXJmMjUwCQl4c2NhbGUKIAogRGF2aWQgTfxsbGVyIDxkLm11ZWxsZXJAZWxzb2Z0LmNoPgogCi0Jc21kazI0MTAJCUFSTTkyMFQKLQlWQ01BOQkJCUFSTTkyMFQKKwlzbWRrMjQxMAlBUk05MjBUCisJVkNNQTkJCUFSTTkyMFQKIAogUm9sZiBPZmZlcm1hbm5zIDxyb2ZAc3lzZ28uZGU+CiAKLQlzaGFubm9uCQkJU0ExMTAwCisJc2hhbm5vbgkJU0ExMTAwCiAKIFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+Ci0JaW50ZWdyYXRvcmNwCQlBbGwgY3VycmVudCBBUk0gc3VwcGxpZWQgJgotCQkJCXN1cHBvcnRlZCBjb3JlIG1vZHVsZXMKLQkJCQktc2VlIGh0dHA6Ly93d3cuYXJtLmNvbQotCQkJCS9wcm9kdWN0cy9EZXZUb29scwotCQkJCS9IYXJkd2FyZV9QbGF0Zm9ybXMuaHRtbAotCXZlcnNhdGlsZQkJQVJNOTI2RUotUwotCXZlcnNhdGlsZQkJQVJNOTI2RUotUworCWludGVncmF0b3JjcAlBbGwgY3VycmVudCBBUk0gc3VwcGxpZWQgJiBzdXBwb3J0ZWQgY29yZSBtb2R1bGVzCisJCQktc2VlIGh0dHA6Ly93d3cuYXJtLmNvbS9wcm9kdWN0cy9EZXZUb29scy9IYXJkd2FyZV9QbGF0Zm9ybXMuaHRtbAorCXZlcnNhdGlsZQlBUk05MjZFSi1TCisJdmVyc2F0aWxlCUFSTTkyNkVKLVMKIAogRGF2ZSBQZXZlcmxleSA8ZHBldmVybGV5QG1wYy1kYXRhLmNvLnVrPgogCi0Jb21hcDczMHAyCQlBUk05MjZFSlMKKwlvbWFwNzMwcDIJQVJNOTI2RUpTCiAKIFN0ZWxpYW4gUG9wIDxzdGVsaWFuLnBvcEBsZWFkdGVjaGRlc2lnbi5jb20+CiAKLQlhdDkxY2FwOWFkawkJQVJNOTI2RUpTIChBVDkxQ0FQOSBTb0MpCi0JYXQ5MXNhbTkyNjBlawkJQVJNOTI2RUpTIChBVDkxU0FNOTI2MCBTb0MpCi0JYXQ5MXNhbTkyNjFlawkJQVJNOTI2RUpTIChBVDkxU0FNOTI2MSBTb0MpCi0JYXQ5MXNhbTkyNjNlawkJQVJNOTI2RUpTIChBVDkxU0FNOTI2MyBTb0MpCi0JYXQ5MXNhbTlybGVrCQlBUk05MjZFSlMgKEFUOTFTQU05UkwgU29DKQorCWF0OTFjYXA5YWRrCUFSTTkyNkVKUyAoQVQ5MUNBUDkgU29DKQorCWF0OTFzYW05MjYwZWsJQVJNOTI2RUpTIChBVDkxU0FNOTI2MCBTb0MpCisJYXQ5MXNhbTkyNjFlawlBUk05MjZFSlMgKEFUOTFTQU05MjYxIFNvQykKKwlhdDkxc2FtOTI2M2VrCUFSTTkyNkVKUyAoQVQ5MVNBTTkyNjMgU29DKQorCWF0OTFzYW05cmxlawlBUk05MjZFSlMgKEFUOTFTQU05UkwgU29DKQogCiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiAKLQlpeGRwZzQyNQkJeHNjYWxlCi0JcGRuYjMJCQl4c2NhbGUKLQlzY3B1CQkJeHNjYWxlCisJaXhkcGc0MjUJeHNjYWxlCisJcGRuYjMJCXhzY2FsZQorCXNjcHUJCXhzY2FsZQogCiBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+CiAKLQljc2IyMjYJCQl4c2NhbGUKLQlpbm5va29tCQkJeHNjYWxlCisJY3NiMjI2CQl4c2NhbGUKKwlpbm5va29tCQl4c2NhbGUKIAogQW5kcmVhIFNjaWFuIDxhbmRyZWEuc2NpYW5AZGF2ZS10ZWNoLml0PgogCi0JQjIJCQlBUk03VERNSSAoUzNDNDRCMFgpCisJQjIJCUFSTTdURE1JIChTM0M0NEIwWCkKIAogR3JlZyBVbmdlcmVyIDxncmVnLnVuZ2VyZXJAb3BlbmdlYXIuY29tPgogCi0JY200MDA4CQkJa3M4Njk1cAotCWNtNDExNgkJCWtzODY5NXAKLQljbTQxNDgJCQlrczg2OTVwCisJY200MDA4CQlrczg2OTVwCisJY200MTE2CQlrczg2OTVwCisJY200MTQ4CQlrczg2OTVwCiAKIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KIAotCW9tYXAyNDIwaDQJCUFSTTExMzZFSlMKKwlvbWFwMjQyMGg0CUFSTTExMzZFSlMKIAogS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNvbT4KIAotCWFwb2xsb24JCQlBUk0xMTM2RUpTCisJYXBvbGxvbgkJQVJNMTEzNkVKUwogCiBBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAKLQlsYXJ0CQkJU0ExMTAwCi0JZG5wMTExMAkJCVNBMTExMAorCWxhcnQJCVNBMTEwMAorCWRucDExMTAJCVNBMTExMAogCiBNaWNoYWVsIFNjaHdpbmdlbiA8bWljaGFlbEBzY2h3aW5nZW4ub3JnPgogCi0JYWN0dXgxCQkJeHNjYWxlCi0JYWN0dXgyCQkJeHNjYWxlCi0JYWN0dXgzCQkJeHNjYWxlCi0JYWN0dXg0CQkJeHNjYWxlCisJYWN0dXgxCQl4c2NhbGUKKwlhY3R1eDIJCXhzY2FsZQorCWFjdHV4MwkJeHNjYWxlCisJYWN0dXg0CQl4c2NhbGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmtub3duIC8gb3JwaGFuZWQgYm9hcmRzOgorIAlCb2FyZAkJQ1BVCUxhc3Qga25vd24gbWFpbnRhaW5lciAvIENvbW1lbnQKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKwljcmFkbGUJCXhzY2FsZQlLeWxlIEhhcnJpcyA8a2hhcnJpc0BuZXh1cy10ZWNoLm5ldD4gLyBkZWFkIGFkZHJlc3MKKwlpeGRwNDI1CQl4c2NhbGUJS3lsZSBIYXJyaXMgPGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQ+IC8gZGVhZCBhZGRyZXNzCisJbHViYm9jawkJeHNjYWxlCUt5bGUgSGFycmlzIDxraGFycmlzQG5leHVzLXRlY2gubmV0PiAvIGRlYWQgYWRkcmVzcwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHg4NiBTeXN0ZW1zOgkJCQkJCQkJIwogIwkJCQkJCQkJCSMKICMgTWFpbnRhaW5lciBOYW1lLCBFbWFpbCBBZGRyZXNzCQkJCQkjCi0jCUJvYXJkCQkJQ1BVCQkJCQkjCisjCUJvYXJkCQlDUFUJCQkJCQkjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIERhbmllbCBFbmdzdHL2bSA8ZGFuaWVsQG9taWNyb24uc2U+CiAKLQlzYzUyMF9jZHAJCXg4NgorCXNjNTIwX2NkcAl4ODYKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBNSVBTIFN5c3RlbXM6CQkJCQkJCQkjCiAjCQkJCQkJCQkJIwogIyBNYWludGFpbmVyIE5hbWUsIEVtYWlsIEFkZHJlc3MJCQkJCSMKLSMJQm9hcmQJCQlDUFUJCQkJCSMKKyMJQm9hcmQJCUNQVQkJCQkJCSMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KIAotCWluY2FpcAkJCU1JUFMzMiA0S2MKLQlwdXJwbGUJCQlNSVBTNjQgNUtjCisJaW5jYWlwCQlNSVBTMzIgNEtjCisJcHVycGxlCQlNSVBTNjQgNUtjCiAKIFRob21hcyBMYW5nZSA8dGhvbWFzQGNvcmVsYXR1cy5zZT4KLQlkYmF1MXgwMAkJTUlQUzMyIEF1MTAwMAotCWd0aDIJCQlNSVBTMzIgQXUxMDAwCisJZGJhdTF4MDAJTUlQUzMyIEF1MTAwMAorCWd0aDIJCU1JUFMzMiBBdTEwMDAKIAogVmxhZCBMdW5ndSA8dmxhZC5sdW5ndUB3aW5kcml2ZXIuY29tPgotCXFlbXVfbWlwcwkJTUlQUzMyCisJcWVtdV9taXBzCU1JUFMzMgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIE5pb3MtMzIgU3lzdGVtczoJCQkJCQkJIwogIwkJCQkJCQkJCSMKICMgTWFpbnRhaW5lciBOYW1lLCBFbWFpbCBBZGRyZXNzCQkJCQkjCi0jCUJvYXJkCQkJQ1BVCQkJCQkjCisjCUJvYXJkCQlDUFUJCQkJCQkjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIFN0ZXBoYW4gTGlueiA8bGluekBsaS1wcm8ubmV0PgogCi0JREsxUzEwCQkJTmlvcy0zMgotCUFETlBFU0MxCQlOaW9zLTMyCisJREsxUzEwCQlOaW9zLTMyCisJQUROUEVTQzEJTmlvcy0zMgogCiBTY290dCBNY051dHQgPHNtY251dHRAcHN5ZW50LmNvbT4KIAotCURLMUMyMAkJCU5pb3MtMzIKKwlESzFDMjAJCU5pb3MtMzIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBOaW9zLUlJIFN5c3RlbXM6CQkJCQkJCSMKICMJCQkJCQkJCQkjCiAjIE1haW50YWluZXIgTmFtZSwgRW1haWwgQWRkcmVzcwkJCQkJIwotIwlCb2FyZAkJCUNQVQkJCQkJIworIwlCb2FyZAkJQ1BVCQkJCQkJIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBTY290dCBNY051dHQgPHNtY251dHRAcHN5ZW50LmNvbT4KIAotCVBDSTU0NDEJCQlOaW9zLUlJCi0JUEsxQzIwCQkJTmlvcy1JSQotCUVQMUMyMAkJCU5pb3MtSUkKLQlFUDFTMTAJCQlOaW9zLUlJCi0JRVAxUzQwCQkJTmlvcy1JSQorCVBDSTU0NDEJCU5pb3MtSUkKKwlQSzFDMjAJCU5pb3MtSUkKKwlFUDFDMjAJCU5pb3MtSUkKKwlFUDFTMTAJCU5pb3MtSUkKKwlFUDFTNDAJCU5pb3MtSUkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBNaWNyb0JsYXplIFN5c3RlbXM6CQkJCQkJCSMKICMJCQkJCQkJCQkjCiAjIE1haW50YWluZXIgTmFtZSwgRW1haWwgQWRkcmVzcwkJCQkJIwotIwlCb2FyZAkJCUNQVQkJCQkJIworIwlCb2FyZAkJQ1BVCQkJCQkJIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBZYXN1c2hpIFNob2ppIDx5YXNoaUBhdG1hcmstdGVjaG5vLmNvbT4KIAotCVNVWkFLVQkJCU1pY3JvQmxhemUKKwlTVVpBS1UJCU1pY3JvQmxhemUKIAogTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgogCi0JTUw0MDEJCQlNaWNyb0JsYXplCi0JWFVQVjJQCQkJTWljcm9CbGF6ZQorCU1MNDAxCQlNaWNyb0JsYXplCisJWFVQVjJQCQlNaWNyb0JsYXplCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQ29sZGZpcmUgU3lzdGVtczoJCQkJCQkJIwogIwkJCQkJCQkJCSMKICMgTWFpbnRhaW5lciBOYW1lLCBFbWFpbCBBZGRyZXNzCQkJCQkjCi0jCUJvYXJkCQkJQ1BVCQkJCQkjCisjCUJvYXJkCQlDUFUJCQkJCQkjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIE1hdHRoaWFzIEZ1Y2hzIDxtYXR0aGlhcy5mdWNoc0Blc2QtZWxlY3Ryb25pY3MuY29tPgogCi0JVEFTUkVHCQkJTUNGNTI0OQorCVRBU1JFRwkJTUNGNTI0OQogCiBUc2lDaHVuZyBMaWV3IDxUc2ktQ2h1bmcuTGlld0BmcmVlc2NhbGUuY29tPgogCi0JTTUyMjc3RVZCCQltY2Y1MjI3eAotCU01MjM1RVZCCQltY2Y1MngyCi0JTTUzMjlFVkIJCW1jZjUzMngKLQlNNTM3M0VWQgkJbWNmNTMyeAotCU01NDQ1NUVWQgkJbWNmNTQ0NXgKLQlNNTQ3NUVWQgkJbWNmNTQ3eF84eAotCU01NDg1RVZCCQltY2Y1NDd4Xzh4CisJTTUyMjc3RVZCCW1jZjUyMjd4CisJTTUyMzVFVkIJbWNmNTJ4MgorCU01MzI5RVZCCW1jZjUzMngKKwlNNTM3M0VWQgltY2Y1MzJ4CisJTTU0NDU1RVZCCW1jZjU0NDV4CisJTTU0NzVFVkIJbWNmNTQ3eF84eAorCU01NDg1RVZCCW1jZjU0N3hfOHgKIAogSGF5ZGVuIEZyYXNlciA8SGF5ZGVuLkZyYXNlckBmcmVlc2NhbGUuY29tPgogCi0JTTUyNTNFVkJFCQltY2Y1MngyCisJTTUyNTNFVkJFCW1jZjUyeDIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBVlIzMiBTeXN0ZW1zOgkJCQkJCQkjCiAjCQkJCQkJCQkJIwogIyBNYWludGFpbmVyIE5hbWUsIEVtYWlsIEFkZHJlc3MJCQkJCSMKLSMJQm9hcmQJCQlDUFUJCQkJCSMKKyMJQm9hcmQJCUNQVQkJCQkJCSMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CiAKLQlBVFNUSzEwMDAJCUFUMzJBUDd4eHgKLQlBVFNUSzEwMDIJCUFUMzJBUDcwMDAKLQlBVFNUSzEwMDMJCUFUMzJBUDcwMDEKLQlBVFNUSzEwMDQJCUFUMzJBUDcwMDIKLQlBVFNUSzEwMDYJCUFUMzJBUDcwMDAKLQlBVE5HVzEwMAkJQVQzMkFQNzAwMAorCUFUU1RLMTAwMAlBVDMyQVA3eHh4CisJQVRTVEsxMDAyCUFUMzJBUDcwMDAKKwlBVFNUSzEwMDMJQVQzMkFQNzAwMQorCUFUU1RLMTAwNAlBVDMyQVA3MDAyCisJQVRTVEsxMDA2CUFUMzJBUDcwMDAKKwlBVE5HVzEwMAlBVDMyQVA3MDAwCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgU3VwZXJIIFN5c3RlbXM6CQkJCQkJCSMKICMJCQkJCQkJCQkjCiAjIE1haW50YWluZXIgTmFtZSwgRW1haWwgQWRkcmVzcwkJCQkJIwotIwlCb2FyZAkJCUNQVQkJCQkJIworIwlCb2FyZAkJQ1BVCQkJCQkJIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CiAKLQlNUzc3NTBTRQkJU0g3NzUwCi0JTVM3NzIyU0UJCVNINzcyMgotCVI3NzgwTVAJCQlTSDc3ODAKLQlSMkRQbHVzCQkJU0g3NzUxUgotCVNINzc2M1JEUAkJU0g3NzYzCisJTVM3NzUwU0UJU0g3NzUwCisJTVM3NzIyU0UJU0g3NzIyCisJUjc3ODBNUAkJU0g3NzgwCisJUjJEUGx1cwkJU0g3NzUxUgorCVNINzc2M1JEUAlTSDc3NjMKIAogTWFyayBKb25hcyA8bWFyay5qb25hc0BkZS5ib3NjaC5jb20+CiAKLQltcHIyCQkJU0g3NzIwCisJbXByMgkJU0g3NzIwCiAKIFlvc2hpaGlybyBTaGltb2RhIDxzaGltb2RhLnlvc2hpaGlyb0ByZW5lc2FzLmNvbT4KIAotCU1TNzcyMFNFCQlTSDc3MjAKKwlNUzc3MjBTRQlTSDc3MjAKIAogWXVzdWtlIEdvZGEgPGdvZGEueXVzdWtlQHJlbmVzYXMuY29tPgogCi0JTUlHTy1SCQkJU0g3NzIyCisJTUlHTy1SCQlTSDc3MjIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBCbGFja2ZpbiBTeXN0ZW1zOgkJCQkJCQkjCiAjCQkJCQkJCQkJIwogIyBNYWludGFpbmVyIE5hbWUsIEVtYWlsIEFkZHJlc3MJCQkJCSMKLSMJQm9hcmQJCQlDUFUJCQkJCSMKKyMJQm9hcmQJCUNQVQkJCQkJCSMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgogQmxhY2tmaW4gVGVhbSA8dS1ib290LWRldmVsQGJsYWNrZmluLnVjbGludXgub3JnPgogCi0JQkY1MzMtRVpLSVQJCUJGNTMzCi0JQkY1MzMtU1RBTVAJCUJGNTMzCi0JQkY1MzctU1RBTVAJCUJGNTM3Ci0JQkY1NjEtRVpLSVQJCUJGNTYxCisJQkY1MzMtRVpLSVQJQkY1MzMKKwlCRjUzMy1TVEFNUAlCRjUzMworCUJGNTM3LVNUQU1QCUJGNTM3CisJQkY1NjEtRVpLSVQJQkY1NjEKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBFbmQgb2YgTUFJTlRBSU5FUlMgbGlzdAkJCQkJCSMKZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IGUwMGJiOWMuLmMxYTljNjAgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtNDgsNiArNDgsNyBAQAogCW1lY3A1MjAwCVwKIAltb3Rpb25wcm8JXAogCW11bmljZXMJCVwKKwlNVkJDX1AJCVwKIAlvMmRudAkJXAogCXBmNTIwMAkJXAogCVBNNTIwCQlcCkBAIC00NjEsMTMgKzQ2Miw2IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIExJU1RfQVJNOT0iCQkJXAotCWF0OTFjYXA5YWRrCQlcCi0JYXQ5MXJtOTIwMGRrCQlcCi0JYXQ5MXNhbTkyNjBlawkJXAotCWF0OTFzYW05MjYxZWsJCVwKLQlhdDkxc2FtOTI2M2VrCQlcCi0JYXQ5MXNhbTlybGVrCQlcCi0JY21jX3B1MgkJCVwKIAlhcDkyMHQJCQlcCiAJYXA5MjJfWEExMAkJXAogCWFwOTI2ZWpzCQlcCkBAIC00NzgsMTEgKzQ3Miw3IEBACiAJY3A5MjZlanMJCVwKIAljcDk0NmVzCQkJXAogCWNwOTY2CQkJXAotCWNzYjYzNwkJCVwKLQlrYjkyMDIJCQlcCiAJbHBkN2E0MDAJCVwKLQltNTAxc2sJCQlcCi0JbXAydXNiCQkJXAogCW14MWFkcwkJCVwKIAlteDFmczIJCQlcCiAJbmV0c3RhcgkJCVwKQEAgLTU4Nyw2ICs1NzcsNyBAQAogCSR7TElTVF9BUk05fQlcCiAJJHtMSVNUX0FSTTEwfQlcCiAJJHtMSVNUX0FSTTExfQlcCisJJHtMSVNUX2F0OTF9CVwKIAkke0xJU1RfcHhhfQlcCiAJJHtMSVNUX2l4cH0JXAogIgpAQCAtNzAxLDcgKzY5Miw3IEBACiAJTTUyMjc3RVZCCQlcCiAJTTUyMzVFVkIJCVwKIAlNNTI0OUVWQgkJXAotCU01MjUzRVZCCQlcCisJTTUyNTNFVkJFCQlcCiAJTTUyNzFFVkIJCVwKIAlNNTI3MkMzCQkJXAogCU01Mjc1RVZCCQlcCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDZhNzM0ZDEuLjM2OWJiZDcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0yMyw4ICsyMyw4IEBACiAKIFZFUlNJT04gPSAxCiBQQVRDSExFVkVMID0gMwotU1VCTEVWRUwgPSAzCi1FWFRSQVZFUlNJT04gPQorU1VCTEVWRUwgPSA0CitFWFRSQVZFUlNJT04gPSAtcmMxCiBVX0JPT1RfVkVSU0lPTiA9ICQoVkVSU0lPTikuJChQQVRDSExFVkVMKS4kKFNVQkxFVkVMKSQoRVhUUkFWRVJTSU9OKQogVkVSU0lPTl9GSUxFID0gJChvYmopaW5jbHVkZS92ZXJzaW9uX2F1dG9nZW5lcmF0ZWQuaAogCkBAIC00OTMsNiArNDkzLDkgQEAKIEJDMzQ1MF9jb25maWc6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpIC1hIEJDMzQ1MCBwcGMgbXBjNXh4eCBiYzM0NTAKIAorY201MjAwX2NvbmZpZzoJdW5jb25maWcKKwlAJChNS0NPTkZJRykgLWEgY201MjAwIHBwYyBtcGM1eHh4IGNtNTIwMAorCiBjcGNpNTIwMF9jb25maWc6ICB1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAtYSBjcGNpNTIwMCAgcHBjIG1wYzV4eHggY3BjaTUyMDAgZXNkCiAKQEAgLTU0MCw5ICs1NDMsNiBAQAoganVwaXRlcl9jb25maWc6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpIGp1cGl0ZXIgcHBjIG1wYzV4eHgganVwaXRlcgogCi12MzhiX2NvbmZpZzogdW5jb25maWcKLQlAJChNS0NPTkZJRykgLWEgdjM4YiBwcGMgbXBjNXh4eCB2MzhiCi0KIGlua2E0eDBfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSBpbmthNHgwIHBwYyBtcGM1eHh4IGlua2E0eDAKIApAQCAtNjE3LDkgKzYxNywyMCBAQAogbWVjcDUyMDBfY29uZmlnOiAgdW5jb25maWcKIAlAJChNS0NPTkZJRykgbWVjcDUyMDAgIHBwYyBtcGM1eHh4IG1lY3A1MjAwIGVzZAogCittb3Rpb25wcm9fY29uZmlnOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSBtb3Rpb25wcm8gcHBjIG1wYzV4eHggbW90aW9ucHJvCisKIG11bmljZXNfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSBtdW5pY2VzIHBwYyBtcGM1eHh4IG11bmljZXMKIAorTVZCQ19QX2NvbmZpZzogdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBta2RpciAtcCAkKG9iailib2FyZC9tdmJjX3AKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQFsgLXogIiQoZmluZHN0cmluZyBNVkJDX1AsJEApIiBdIHx8IFwKKwl7ICAgCWVjaG8gIiNkZWZpbmUgQ09ORklHX01WQkNfUCIgCT4+JChvYmopaW5jbHVkZS9jb25maWcuaDsgfQorCUAkKE1LQ09ORklHKSAtbiAkQCAtYSBNVkJDX1AgcHBjIG1wYzV4eHggbXZiY19wIG1hdHJpeF92aXNpb24KKwogbzJkbnRfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSBvMmRudCBwcGMgbXBjNXh4eCBvMmRudAogCkBAIC02NDQsOSArNjU1LDYgQEAKIHNtbWFjbzRfY29uZmlnOiB1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAtYSBzbW1hY280IHBwYyBtcGM1eHh4IHRxbTUyMDAgdHFjCiAKLWNtNTIwMF9jb25maWc6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpIC1hIGNtNTIwMCBwcGMgbXBjNXh4eCBjbTUyMDAKLQogc3BpZXZhbF9jb25maWc6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpIC1hIHNwaWV2YWwgcHBjIG1wYzV4eHggdHFtNTIwMCB0cWMKIApAQCAtNzQwLDIyICs3NDgsMjMgQEAKIAkJeyBlY2hvICJURVhUX0JBU0UgPSAweEZGRjAwMDAwIiA+JChvYmopYm9hcmQvdHFtNTIwMC9jb25maWcudG1wIDsgXAogCQl9CiAJQCQoTUtDT05GSUcpIC1uICRAIC1hIFRRTTUyMDAgcHBjIG1wYzV4eHggdHFtNTIwMCB0cWMKKwogdWMxMDFfY29uZmlnOgkJdW5jb25maWcKIAlAJChNS0NPTkZJRykgdWMxMDEgcHBjIG1wYzV4eHggdWMxMDEKLW1vdGlvbnByb19jb25maWc6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpIG1vdGlvbnBybyBwcGMgbXBjNXh4eCBtb3Rpb25wcm8KIAordjM4Yl9jb25maWc6IHVuY29uZmlnCisJQCQoTUtDT05GSUcpIC1hIHYzOGIgcHBjIG1wYzV4eHggdjM4YgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNUEM1MTJ4IFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwogYWRzNTEyMV9jb25maWcgXAotYWRzNTEyMV9QQ0lfY29uZmlnIFwKLQk6CQkgdW5jb25maWcKK2FkczUxMjFfcmV2Ml9jb25maWcJXAorCTogdW5jb25maWcKIAlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQotCUBpZiBbICIkKGZpbmRzdHJpbmcgX1BDSV8sJEApIiBdIDsgdGhlbiBcCi0JCWVjaG8gIiNkZWZpbmUgQ09ORklHX1BDSSIgID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKLQkJJChYRUNITykgIi4uLiB3aXRoIFBDSSBlbmFibGVkIiA7IFwKKwlAaWYgWyAiJChmaW5kc3RyaW5nIHJldjIsJEApIiBdIDsgdGhlbiBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0FEUzUxMjFfUkVWMiAxIiA+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7IFwKIAlmaQogCUAkKE1LQ09ORklHKSAtYSBhZHM1MTIxIHBwYyBtcGM1MTJ4IGFkczUxMjEKIApAQCAtMTIyMCw2ICsxMjI5LDkgQEAKIAkJfQogCUAkKE1LQ09ORklHKSAtYSAkKGNhbGwgeHRyYWN0XzR4eCwkQCkgcHBjIHBwYzR4eCBQUENoYW1lbGVvbkVWQiBkYXZlCiAKK0NNUzcwMF9jb25maWc6CXVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBjbXM3MDAgZXNkCisKIENQQ0kyRFBfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggY3BjaTJkcCBlc2QKIApAQCAtMTQwMSw2ICsxNDEzLDkgQEAKIHNiYzQwNV9jb25maWc6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBzYmM0MDUKIAorc2MzX2NvbmZpZzp1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggc2MzCisKIHNlcXVvaWFfY29uZmlnIFwKIHJhaW5pZXJfY29uZmlnOiB1bmNvbmZpZwogCUBta2RpciAtcCAkKG9iailpbmNsdWRlCkBAIC0xNDE5LDkgKzE0MzQsNiBAQAogCUBlY2hvICJURVhUX0JBU0UgPSAweDAxMDAwMDAwIiA+ICQob2JqKWJvYXJkL2FtY2Mvc2VxdW9pYS9jb25maWcudG1wCiAJQGVjaG8gIkNPTkZJR19OQU5EX1VfQk9PVCA9IHkiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLm1rCiAKLXNjM19jb25maWc6dW5jb25maWcKLQlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHNjMwotCiB0YWlodV9jb25maWc6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCB0YWlodSBhbWNjCiAKQEAgLTE0MzQsOSArMTQ0Niw2IEBACiBWT000MDVfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggdm9tNDA1IGVzZAogCi1DTVM3MDBfY29uZmlnOgl1bmNvbmZpZwotCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggY21zNzAwIGVzZAotCiBXN09MTUNfY29uZmlnCVwKIFc3T0xNR19jb25maWc6IHVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCB3N28KQEAgLTE4NjEsOSArMTg3MCw2IEBACiBNNTI4MkVWQl9jb25maWcgOgkJdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBtNjhrIG1jZjUyeDIgbTUyODJldmIKIAotVEFTUkVHX2NvbmZpZyA6CQl1bmNvbmZpZwotCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIG02OGsgbWNmNTJ4MiB0YXNyZWcgZXNkCi0KIE01MzI5QUZFRV9jb25maWcgXAogTTUzMjlCRkVFX2NvbmZpZyA6CXVuY29uZmlnCiAJQGNhc2UgIiRAIiBpbiBcCkBAIC0xOTgzLDYgKzE5ODksOSBAQAogCWZpCiAJQCQoTUtDT05GSUcpIC1hIE01NDg1RVZCIG02OGsgbWNmNTQ3eF84eCBtNTQ4eGV2YiBmcmVlc2NhbGUKIAorVEFTUkVHX2NvbmZpZyA6CQl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIG02OGsgbWNmNTJ4MiB0YXNyZWcgZXNkCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIE1QQzgzeHggU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMjMwNiwxMiArMjMxNSwxMiBAQAogUENJUFBDNl9jb25maWc6IHVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIDc0eHhfN3h4IHBjaXBwYzIKIAotWlVNQV9jb25maWc6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIDc0eHhfN3h4IGV2YjY0MjYwCi0KIHBwbWM3eHhfY29uZmlnOiB1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyA3NHh4Xzd4eCBwcG1jN3h4CiAKK1pVTUFfY29uZmlnOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyA3NHh4Xzd4eCBldmI2NDI2MAorCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIEFSTQogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjM2MywxMiArMjM3MiwxMiBAQAoga2I5MjAyX2NvbmZpZwk6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQga2I5MjAyIE5VTEwgYXQ5MXJtOTIwMAogCi1tcDJ1c2JfY29uZmlnCToJdW5jb25maWcKLQlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBtcDJ1c2IgTlVMTCBhdDkxcm05MjAwCi0KIG01MDFza19jb25maWcJOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG01MDFzayBOVUxMIGF0OTFybTkyMDAKIAorbXAydXNiX2NvbmZpZwk6CXVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgbXAydXNiIE5VTEwgYXQ5MXJtOTIwMAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBBdG1lbCBBUk05MjZFSi1TIFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTI0MDUsNiArMjQxNCwxOCBAQAogY3AxMDI2X2NvbmZpZzogdW5jb25maWcKIAlAYm9hcmQvaW50ZWdyYXRvcmNwL3NwbGl0X2J5X3ZhcmlhbnQuc2ggJEAKIAorZGF2aW5jaV9kdmV2bV9jb25maWcgOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjZlanMgZHYtZXZtIGRhdmluY2kgZGF2aW5jaQorCitkYXZpbmNpX3NjaG1vb2dpZV9jb25maWcgOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjZlanMgc2NobW9vZ2llIGRhdmluY2kgZGF2aW5jaQorCitkYXZpbmNpX3NmZnNkcl9jb25maWcgOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjZlanMgc2Zmc2RyIGRhdmluY2kgZGF2aW5jaQorCitkYXZpbmNpX3NvbmF0YV9jb25maWcgOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjZlanMgc29uYXRhIGRhdmluY2kgZGF2aW5jaQorCiBscGQ3YTQwMF9jb25maWcgXAogbHBkN2E0MDRfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBsaDdhNDB4IGxwZDdhNDB4CkBAIC0yNDIxLDIxICsyNDQyLDYgQEAKIG9tYXAxNTEwaW5uX2NvbmZpZyA6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNXQgb21hcDE1MTBpbm4KIAotb21hcDU5MTJvc2tfY29uZmlnIDoJdW5jb25maWcKLQlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTI2ZWpzIG9tYXA1OTEyb3NrIE5VTEwgb21hcAotCi1kYXZpbmNpX2R2ZXZtX2NvbmZpZyA6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNmVqcyBkdi1ldm0gZGF2aW5jaSBkYXZpbmNpCi0KLWRhdmluY2lfc2NobW9vZ2llX2NvbmZpZyA6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNmVqcyBzY2htb29naWUgZGF2aW5jaSBkYXZpbmNpCi0KLWRhdmluY2lfc2Zmc2RyX2NvbmZpZyA6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNmVqcyBzZmZzZHIgZGF2aW5jaSBkYXZpbmNpCi0KLWRhdmluY2lfc29uYXRhX2NvbmZpZyA6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNmVqcyBzb25hdGEgZGF2aW5jaSBkYXZpbmNpCi0KIHh0cmFjdF9vbWFwMTYxMHh4eCA9ICQoc3Vic3QgX2NzMGJvb3QsLCQoc3Vic3QgX2NzM2Jvb3QsLCQoc3Vic3QgX2NzX2F1dG9ib290LCwkKHN1YnN0IF9jb25maWcsLCQxKSkpKQogCiBvbWFwMTYxMGlubl9jb25maWcgXApAQCAtMjQ1OSw2ICsyNDY1LDkgQEAKIAlmaTsKIAlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF9vbWFwMTYxMHh4eCwkQCkgYXJtIGFybTkyNmVqcyBvbWFwMTYxMGlubiBOVUxMIG9tYXAKIAorb21hcDU5MTJvc2tfY29uZmlnIDoJdW5jb25maWcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTI2ZWpzIG9tYXA1OTEyb3NrIE5VTEwgb21hcAorCiB4dHJhY3Rfb21hcDczMHAyID0gJChzdWJzdCBfY3MwYm9vdCwsJChzdWJzdCBfY3MzYm9vdCwsICQoc3Vic3QgX2NvbmZpZywsJDEpKSkKIAogb21hcDczMHAyX2NvbmZpZyBcCkBAIC0yNTIwLDkgKzI1MjksMTYgQEAKIFZDTUE5X2NvbmZpZwk6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgdmNtYTkgbXBsIHMzYzI0eDAKIAotIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBUk0gc3VwcGxpZWQgVmVyc2F0aWxlIGRldmVsb3BtZW50IGJvYXJkcwotIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbTQwMDhfY29uZmlnCToJdW5jb25maWcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBjbTQwMDggTlVMTCBrczg2OTUKKworY200MXh4X2NvbmZpZwk6CXVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgY200MXh4IE5VTEwga3M4Njk1CisKIHZlcnNhdGlsZV9jb25maWcJXAogdmVyc2F0aWxlYWJfY29uZmlnCVwKIHZlcnNhdGlsZXBiX2NvbmZpZyA6CXVuY29uZmlnCkBAIC0yNTMxLDEyICsyNTQ3LDYgQEAKIHZvaWNlYmx1ZV9jb25maWc6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNXQgdm9pY2VibHVlCiAKLWNtNDAwOF9jb25maWcJOgl1bmNvbmZpZwotCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IGNtNDAwOCBOVUxMIGtzODY5NQotCi1jbTQxeHhfY29uZmlnCToJdW5jb25maWcKLQlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBjbTQxeHggTlVMTCBrczg2OTUKLQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgUzNDNDRCMCBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0yNjUxLDggKzI2NjEsNiBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgQVJNMTEzNiBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1vbWFwMjQyMGg0X2NvbmZpZwk6IHVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTExMzYgb21hcDI0MjBoNCBOVUxMIG9tYXAyNHh4CiAKIGFwb2xsb25fY29uZmlnCQk6IHVuY29uZmlnCiAJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKQEAgLTI2NjksNiArMjY3Nyw5IEBACiBteDMxYWRzX2NvbmZpZwkJOiB1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm0xMTM2IG14MzFhZHMgTlVMTCBteDMxCiAKK29tYXAyNDIwaDRfY29uZmlnCTogdW5jb25maWcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtMTEzNiBvbWFwMjQyMGg0IE5VTEwgb21hcDI0eHgKKwogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBpMzg2CiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNzE4LDYgKzI3MjksNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgTUlQUzMyIEFVMVgwMAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiBkYmF1MTAwMF9jb25maWcJCToJdW5jb25maWcKIAlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBlY2hvICIjZGVmaW5lIENPTkZJR19EQkFVMTAwMCAxIiA+JChvYmopaW5jbHVkZS9jb25maWcuaApAQCAtMjc0MywxNyArMjc1NSwxNyBAQAogCUBlY2hvICIjZGVmaW5lIENPTkZJR19EQkFVMTU1MCAxIiA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUAkKE1LQ09ORklHKSAtYSBkYmF1MXgwMCBtaXBzIG1pcHMgZGJhdTF4MDAKIAorZ3RoMl9jb25maWcJCToJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBlY2hvICIjZGVmaW5lIENPTkZJR19HVEgyIDEiID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQCQoTUtDT05GSUcpIC1hIGd0aDIgbWlwcyBtaXBzIGd0aDIKKwogcGIxMDAwX2NvbmZpZwkJOgl1bmNvbmZpZwogCUBta2RpciAtcCAkKG9iailpbmNsdWRlCiAJQGVjaG8gIiNkZWZpbmUgQ09ORklHX1BCMTAwMCAxIiA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUAkKE1LQ09ORklHKSAtYSBwYjF4MDAgbWlwcyBtaXBzIHBiMXgwMAogCi1ndGgyX2NvbmZpZzoJdW5jb25maWcKLQlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQotCUBlY2hvICIjZGVmaW5lIENPTkZJR19HVEgyIDEiID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCi0JQCQoTUtDT05GSUcpIC1hIGd0aDIgbWlwcyBtaXBzIGd0aDIKLQotcWVtdV9taXBzX2NvbmZpZzogdW5jb25maWcKK3FlbXVfbWlwc19jb25maWcJOiB1bmNvbmZpZwogCUBta2RpciAtcCAkKG9iailpbmNsdWRlCiAJQGVjaG8gIiNkZWZpbmUgQ09ORklHX1FFTVVfTUlQUyAxIiA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUAkKE1LQ09ORklHKSAtYSBxZW11LW1pcHMgbWlwcyBtaXBzIHFlbXUtbWlwcwpAQCAtMjc3Miw2ICsyNzg0LDI0IEBACiAjIyBOaW9zMzIKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAorQUROUEVTQzFfRE5QRVZBMl9iYXNlXzMyX2NvbmZpZwlcCitBRE5QRVNDMV9iYXNlXzMyX2NvbmZpZwkJXAorQUROUEVTQzFfY29uZmlnOiB1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQFsgLXogIiQoZmluZHN0cmluZyBfRE5QRVZBMiwkQCkiIF0gfHwgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0ROUEVWQTIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgICQoWEVDSE8pICIuLi4gRE5QL0VWQTIgY29uZmlndXJhdGlvbiIgOyBcCisJCX0KKwlAWyAteiAiJChmaW5kc3RyaW5nIF9iYXNlXzMyLCRAKSIgXSB8fCBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTklPU19CQVNFXzMyIDEiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJICAkKFhFQ0hPKSAiLi4uIE5JT1MgJ2Jhc2VfMzInIGNvbmZpZ3VyYXRpb24iIDsgXAorCQl9CisJQFsgLXogIiQoZmluZHN0cmluZyBBRE5QRVNDMV9jb25maWcsJEApIiBdIHx8IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19OSU9TX0JBU0VfMzIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgICQoWEVDSE8pICIuLi4gTklPUyAnYmFzZV8zMicgY29uZmlndXJhdGlvbiAoREVGQVVMVCkiIDsgXAorCQl9CisJQCQoTUtDT05GSUcpIC1hIEFETlBFU0MxIG5pb3MgbmlvcyBhZG5wZXNjMSBzc3YKKwogREsxQzIwX3NhZmVfMzJfY29uZmlnCQlcCiBESzFDMjBfc3RhbmRhcmRfMzJfY29uZmlnCVwKIERLMUMyMF9jb25maWc6CXVuY29uZmlnCkBAIC0yODEzLDI0ICsyODQzLDYgQEAKIAkJfQogCUAkKE1LQ09ORklHKSAtYSBESzFTMTAgbmlvcyBuaW9zIGRrMXMxMCBhbHRlcmEKIAotQUROUEVTQzFfRE5QRVZBMl9iYXNlXzMyX2NvbmZpZwlcCi1BRE5QRVNDMV9iYXNlXzMyX2NvbmZpZwkJXAotQUROUEVTQzFfY29uZmlnOiB1bmNvbmZpZwotCUBta2RpciAtcCAkKG9iailpbmNsdWRlCi0JQFsgLXogIiQoZmluZHN0cmluZyBfRE5QRVZBMiwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0ROUEVWQTIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCQkgICQoWEVDSE8pICIuLi4gRE5QL0VWQTIgY29uZmlndXJhdGlvbiIgOyBcCi0JCX0KLQlAWyAteiAiJChmaW5kc3RyaW5nIF9iYXNlXzMyLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTklPU19CQVNFXzMyIDEiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKLQkJICAkKFhFQ0hPKSAiLi4uIE5JT1MgJ2Jhc2VfMzInIGNvbmZpZ3VyYXRpb24iIDsgXAotCQl9Ci0JQFsgLXogIiQoZmluZHN0cmluZyBBRE5QRVNDMV9jb25maWcsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19OSU9TX0JBU0VfMzIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCQkgICQoWEVDSE8pICIuLi4gTklPUyAnYmFzZV8zMicgY29uZmlndXJhdGlvbiAoREVGQVVMVCkiIDsgXAotCQl9Ci0JQCQoTUtDT05GSUcpIC1hIEFETlBFU0MxIG5pb3MgbmlvcyBhZG5wZXNjMSBzc3YKLQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgTmlvcy1JSQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMjg1MSwyMSArMjg2MywxOSBAQAogCUAkKE1LQ09ORklHKSAgUENJNTQ0MSBuaW9zMiBuaW9zMiBwY2k1NDQxIHBzeWVudAogCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIE1pY3JvQmxhemUKLSM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIE1pY3JvYmxhemUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXN1emFrdV9jb25maWc6CXVuY29uZmlnCi0JQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfU1VaQUtVIDEiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAotCUAkKE1LQ09ORklHKSAtYSAkKEA6X2NvbmZpZz0pIG1pY3JvYmxhemUgbWljcm9ibGF6ZSBzdXpha3UgQXRtYXJrVGVjaG5vCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIG1sNDAxX2NvbmZpZzoJdW5jb25maWcKIAlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBlY2hvICIjZGVmaW5lIENPTkZJR19NTDQwMSAxIiA+ICQob2JqKWluY2x1ZGUvY29uZmlnLmgKIAlAJChNS0NPTkZJRykgLWEgJChAOl9jb25maWc9KSBtaWNyb2JsYXplIG1pY3JvYmxhemUgbWw0MDEgeGlsaW54CiAKK3N1emFrdV9jb25maWc6CXVuY29uZmlnCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfU1VaQUtVIDEiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAorCUAkKE1LQ09ORklHKSAtYSAkKEA6X2NvbmZpZz0pIG1pY3JvYmxhemUgbWljcm9ibGF6ZSBzdXpha3UgQXRtYXJrVGVjaG5vCisKIHh1cHYycF9jb25maWc6CXVuY29uZmlnCiAJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKIAlAZWNobyAiI2RlZmluZSBDT05GSUdfWFVQVjJQIDEiID4gJChvYmopaW5jbHVkZS9jb25maWcuaApAQCAtMjg4OCw5ICsyODk4LDkgQEAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgQVZSMzIKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIEFUMzJBUDcweHgKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworYXRuZ3cxMDBfY29uZmlnCToJdW5jb25maWcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhdnIzMiBhdDMyYXAgYXRuZ3cxMDAgYXRtZWwgYXQzMmFwNzAweAogCiBhdHN0azEwMDJfY29uZmlnCToJdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhdnIzMiBhdDMyYXAgYXRzdGsxMDAwIGF0bWVsIGF0MzJhcDcwMHgKQEAgLTI5MDQsMTYgKzI5MTQsMTQgQEAKIGF0c3RrMTAwNl9jb25maWcJOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGF2cjMyIGF0MzJhcCBhdHN0azEwMDAgYXRtZWwgYXQzMmFwNzAweAogCi1hdG5ndzEwMF9jb25maWcJOgl1bmNvbmZpZwotCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGF2cjMyIGF0MzJhcCBhdG5ndzEwMCBhdG1lbCBhdDMyYXA3MDB4Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgU0gzIChTdXBlckgpCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIHNoMyAoUmVuZXNhcyBTdXBlckgpCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKIG1wcjJfY29uZmlnOiB1bmNvbmZpZwogCUBta2RpciAtcCAkKG9iailpbmNsdWRlCiAJQGVjaG8gIiNkZWZpbmUgQ09ORklHX01QUjIgMSIgPiAkKG9iailpbmNsdWRlL2NvbmZpZy5oCkBAIC0yOTI3LDYgKzI5MzUsMTIgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIHNoNCAoUmVuZXNhcyBTdXBlckgpCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK01pZ29SX2NvbmZpZyA6ICAgICAgIHVuY29uZmlnCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfTUlHT19SIDEiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAorCUAuL21rY29uZmlnIC1hICQoQDpfY29uZmlnPSkgc2ggc2g0IE1pZ29SCisKIG1zNzc1MHNlX2NvbmZpZzogdW5jb25maWcKIAlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBlY2hvICIjZGVmaW5lIENPTkZJR19NUzc3NTBTRSAxIiA+ICQob2JqKWluY2x1ZGUvY29uZmlnLmgKQEAgLTI5MzcsMjEgKzI5NTEsMTYgQEAKIAlAZWNobyAiI2RlZmluZSBDT05GSUdfTVM3NzIyU0UgMSIgPiAkKG9iailpbmNsdWRlL2NvbmZpZy5oCiAJQCQoTUtDT05GSUcpIC1hICQoQDpfY29uZmlnPSkgc2ggc2g0IG1zNzcyMnNlCiAKLU1pZ29SX2NvbmZpZyA6ICAgICAgIHVuY29uZmlnCityMmRwbHVzX2NvbmZpZyAgOiAgIHVuY29uZmlnCiAJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfTUlHT19SIDEiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hICQoQDpfY29uZmlnPSkgc2ggc2g0IE1pZ29SCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX1IyRFBMVVMgMSIgPiAkKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQC4vbWtjb25maWcgLWEgJChAOl9jb25maWc9KSBzaCBzaDQgcjJkcGx1cwogCiByNzc4MG1wX2NvbmZpZzogdW5jb25maWcKIAlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBlY2hvICIjZGVmaW5lIENPTkZJR19SNzc4ME1QIDEiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAogCUAuL21rY29uZmlnIC1hICQoQDpfY29uZmlnPSkgc2ggc2g0IHI3NzgwbXAKIAotcjJkcGx1c19jb25maWcgIDogICB1bmNvbmZpZwotCUBta2RpciAtcCAkKG9iailpbmNsdWRlCi0JQGVjaG8gIiNkZWZpbmUgQ09ORklHX1IyRFBMVVMgMSIgPiAkKG9iailpbmNsdWRlL2NvbmZpZy5oCi0JQC4vbWtjb25maWcgLWEgJChAOl9jb25maWc9KSBzaCBzaDQgcjJkcGx1cwotCiBzaDc3NjNyZHBfY29uZmlnICA6ICAgdW5jb25maWcKIAlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBlY2hvICIjZGVmaW5lIENPTkZJR19TSDc3NjNSRFAgMSIgPiAkKG9iailpbmNsdWRlL2NvbmZpZy5oCkBAIC0yOTYwLDYgKzI5NjksNyBAQAogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBTUEFSQwogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBMRU9OMwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy9FQitNQ0YtRVYxMjMuYyBiL2JvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvRUIrTUNGLUVWMTIzLmMKaW5kZXggZmFkOWM0MC4uMzljOTdiMSAxMDA2NDQKLS0tIGEvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy9FQitNQ0YtRVYxMjMuYworKysgYi9ib2FyZC9CdVMvRUIrTUNGLUVWMTIzL0VCK01DRi1FVjEyMy5jCkBAIC00MSw1MSArNDEsNTEgQEAKIAogcGh5c19zaXplX3QgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQogewotCWludCBzaXplLGk7CisJaW50IHNpemUsIGk7CiAKIAlzaXplID0gMDsKLQlNQ0ZTRFJBTUNfRENSID0JTUNGU0RSQU1DX0RDUl9SVElNXzYKLQkJCXwgTUNGU0RSQU1DX0RDUl9SQygoMTUgKiBDRkdfQ0xLKT4+NCk7Ci0JI2lmZGVmIENGR19TRFJBTV9CQVNFMAorCU1DRlNEUkFNQ19EQ1IgPSBNQ0ZTRFJBTUNfRENSX1JUSU1fNgorCQkJfCBNQ0ZTRFJBTUNfRENSX1JDICgoMTUgKiBDRkdfQ0xLKSA+PiA0KTsKKyNpZmRlZiBDRkdfU0RSQU1fQkFTRTAKIAotCQlNQ0ZTRFJBTUNfREFDUjAgPQlNQ0ZTRFJBTUNfREFDUl9CQVNFKENGR19TRFJBTV9CQVNFMCkKLQkJCQkJfCBNQ0ZTRFJBTUNfREFDUl9DQVNMKDEpCi0JCQkJCXwgTUNGU0RSQU1DX0RBQ1JfQ0JNKDMpCi0JCQkJCXwgTUNGU0RSQU1DX0RBQ1JfUFNfMTYpOworCU1DRlNEUkFNQ19EQUNSMCA9IE1DRlNEUkFNQ19EQUNSX0JBU0UgKENGR19TRFJBTV9CQVNFMCkKKwkJCXwgTUNGU0RSQU1DX0RBQ1JfQ0FTTCAoMSkKKwkJCXwgTUNGU0RSQU1DX0RBQ1JfQ0JNICgzKQorCQkJfCBNQ0ZTRFJBTUNfREFDUl9QU18xNjsKIAotCQlNQ0ZTRFJBTUNfRE1SMCA9CU1DRlNEUkFNQ19ETVJfQkFNXzE2TQotCQkJCQl8IE1DRlNEUkFNQ19ETVJfVjsKKwlNQ0ZTRFJBTUNfRE1SMCA9IE1DRlNEUkFNQ19ETVJfQkFNXzE2TSB8IE1DRlNEUkFNQ19ETVJfVjsKIAotCQlNQ0ZTRFJBTUNfREFDUjAgfD0JTUNGU0RSQU1DX0RBQ1JfSVA7CisJTUNGU0RSQU1DX0RBQ1IwIHw9IE1DRlNEUkFNQ19EQUNSX0lQOwogCi0JCSoodW5zaWduZWQgc2hvcnQgKikoQ0ZHX1NEUkFNX0JBU0UwKSA9IDB4QTVBNTsKLQkJTUNGU0RSQU1DX0RBQ1IwIHw9CU1DRlNEUkFNQ19EQUNSX1JFOwotCQlmb3IgKGk9MDsgaSA8IDIwMDA7IGkrKykKLQkJCWFzbSgiIG5vcCIpOwotCQltYmFyX3dyaXRlTG9uZyhNQ0ZTRFJBTUNfREFDUjAsIG1iYXJfcmVhZExvbmcoTUNGU0RSQU1DX0RBQ1IwKQotCQkJCQkJCQkgICAgfCBNQ0ZTRFJBTUNfREFDUl9JTVJTKTsKLQkJKih1bnNpZ25lZCBpbnQgKikoQ0ZHX1NEUkFNX0JBU0UwICsgMHgyMjApID0gMHhBNUE1OwotCQlzaXplICs9IENGR19TRFJBTV9TSVpFICogMTAyNCAqIDEwMjQ7Ci0JI2VuZGlmCi0JI2lmZGVmIENGR19TRFJBTV9CQVNFMQotCQlNQ0ZTRFJBTUNfREFDUjEgPQlNQ0ZTRFJBTUNfREFDUl9CQVNFKENGR19TRFJBTV9CQVNFMSkKLQkJCQkJfCBNQ0ZTRFJBTUNfREFDUl9DQVNMKDEpCi0JCQkJCXwgTUNGU0RSQU1DX0RBQ1JfQ0JNKDMpCi0JCQkJCXwgTUNGU0RSQU1DX0RBQ1JfUFNfMTY7CisJKih1bnNpZ25lZCBzaG9ydCAqKSAoQ0ZHX1NEUkFNX0JBU0UwKSA9IDB4QTVBNTsKKwlNQ0ZTRFJBTUNfREFDUjAgfD0gTUNGU0RSQU1DX0RBQ1JfUkU7CisJZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykKKwkJYXNtICgiIG5vcCIpOworCW1iYXJfd3JpdGVMb25nIChNQ0ZTRFJBTUNfREFDUjAsCisJCQltYmFyX3JlYWRMb25nIChNQ0ZTRFJBTUNfREFDUjApIHwgTUNGU0RSQU1DX0RBQ1JfSU1SUyk7CisJKih1bnNpZ25lZCBpbnQgKikgKENGR19TRFJBTV9CQVNFMCArIDB4MjIwKSA9IDB4QTVBNTsKKwlzaXplICs9IENGR19TRFJBTV9TSVpFICogMTAyNCAqIDEwMjQ7CisjZW5kaWYKKyNpZmRlZiBDRkdfU0RSQU1fQkFTRTEKKwlNQ0ZTRFJBTUNfREFDUjEgPSBNQ0ZTRFJBTUNfREFDUl9CQVNFIChDRkdfU0RSQU1fQkFTRTEpCisJCQl8IE1DRlNEUkFNQ19EQUNSX0NBU0wgKDEpCisJCQl8IE1DRlNEUkFNQ19EQUNSX0NCTSAoMykKKwkJCXwgTUNGU0RSQU1DX0RBQ1JfUFNfMTY7CiAKLQkJTUNGU0RSQU1DX0RNUjEgPQlNQ0ZTRFJBTUNfRE1SX0JBTV8xNk0KLQkJCQkJfCBNQ0ZTRFJBTUNfRE1SX1Y7CisJTUNGU0RSQU1DX0RNUjEgPSBNQ0ZTRFJBTUNfRE1SX0JBTV8xNk0gfCBNQ0ZTRFJBTUNfRE1SX1Y7CiAKLQkJTUNGU0RSQU1DX0RBQ1IxIHw9CU1DRlNEUkFNQ19EQUNSX0lQOworCU1DRlNEUkFNQ19EQUNSMSB8PSBNQ0ZTRFJBTUNfREFDUl9JUDsKIAotCQkqKHVuc2lnbmVkIHNob3J0ICopKENGR19TRFJBTV9CQVNFMSkgPSAweEE1QTU7Ci0JCU1DRlNEUkFNQ19EQUNSMSB8PQlNQ0ZTRFJBTUNfREFDUl9SRTsKLQkJZm9yIChpPTA7IGkgPCAyMDAwOyBpKyspCi0JCQlhc20oIiBub3AiKTsKLQkJTUNGU0RSQU1DX0RBQ1IxIHw9CU1DRlNEUkFNQ19EQUNSX0lNUlM7Ci0JCSoodW5zaWduZWQgaW50ICopKENGR19TRFJBTV9CQVNFMSArIDB4MjIwKSA9IDB4QTVBNTsKLQkJc2l6ZSArPSBDRkdfU0RSQU1fU0laRTEgKiAxMDI0ICogMTAyNDsKLQkjZW5kaWYKKwkqKHVuc2lnbmVkIHNob3J0ICopIChDRkdfU0RSQU1fQkFTRTEpID0gMHhBNUE1OworCU1DRlNEUkFNQ19EQUNSMSB8PSBNQ0ZTRFJBTUNfREFDUl9SRTsKKworCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspCisJCWFzbSAoIiBub3AiKTsKKworCU1DRlNEUkFNQ19EQUNSMSB8PSBNQ0ZTRFJBTUNfREFDUl9JTVJTOworCSoodW5zaWduZWQgaW50ICopIChDRkdfU0RSQU1fQkFTRTEgKyAweDIyMCkgPSAweEE1QTU7CisJc2l6ZSArPSBDRkdfU0RSQU1fU0laRTEgKiAxMDI0ICogMTAyNDsKKyNlbmRpZgogCXJldHVybiBzaXplOwogfQogCmRpZmYgLS1naXQgYS9ib2FyZC9CdVMvRUIrTUNGLUVWMTIzL2NmbV9mbGFzaC5jIGIvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy9jZm1fZmxhc2guYwppbmRleCBiMzI2Mzg0Li45OGU1NjNmIDEwMDY0NAotLS0gYS9ib2FyZC9CdVMvRUIrTUNGLUVWMTIzL2NmbV9mbGFzaC5jCisrKyBiL2JvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvY2ZtX2ZsYXNoLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWRlc3QgPSBjbWZfYmFja2Rvb3JfYWRkcmVzcyhhZGRyKTsKIAl3aGlsZSAoKGNudD49NCkgJiYgKHJjID09IEVSUl9PSykpCiAJewotCQlkYXRhID0qKCh2b2xhdGlsZSB1MzIgKikgc3JjKTsKKwkJZGF0YSA9ICooKHZvbGF0aWxlIHUzMiAqKSBzcmMpOwogCQkqKHZvbGF0aWxlIHUzMiopIGRlc3QgPSBkYXRhOwogCQlNQ0ZDRk1fQ01EID0gTUNGQ0ZNX0NNRF9QR007CiAJCU1DRkNGTV9VU1RBVCA9IE1DRkNGTV9VU1RBVF9DQkVJRjsKZGlmZiAtLWdpdCBhL2JvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvZmxhc2guYyBiL2JvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvZmxhc2guYwppbmRleCA1ZTI2NDdkLi5jMmExYjZmIDEwMDY0NAotLS0gYS9ib2FyZC9CdVMvRUIrTUNGLUVWMTIzL2ZsYXNoLmMKKysrIGIvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy9mbGFzaC5jCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAlkZXN0ID0gYWRkcjsKIAl3aGlsZSAoKGNudD49MikgJiYgKHJjID09IEVSUl9PSykpCiAJewotCQlkYXRhID0qKCh2b2xhdGlsZSB1MTYgKikgc3JjKTsKKwkJZGF0YSA9ICooKHZvbGF0aWxlIHUxNiAqKSBzcmMpOwogCQlyYz1hbWRfd3JpdGVfd29yZCAoaW5mbyxkZXN0LGRhdGEpOwogCQlzcmMgKz0yOwogCQlkZXN0ICs9MjsKZGlmZiAtLWdpdCBhL2JvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvbWlpLmMgYi9ib2FyZC9CdVMvRUIrTUNGLUVWMTIzL21paS5jCmluZGV4IDNlYTIwYTYuLjhhZTJlYzYgMTAwNjQ0Ci0tLSBhL2JvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvbWlpLmMKKysrIGIvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy9taWkuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiB9CiAjZW5kaWYJCQkJLyogQ0ZHX0RJU0NPVkVSX1BIWSAqLwogCi1pbnQgbWlpX2luaXQodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygiX19taWlfaW5pdCIpKSk7Cit2b2lkIG1paV9pbml0KHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoIl9fbWlpX2luaXQiKSkpOwogCiB2b2lkIF9fbWlpX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvcHMya2JkLmMgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3BzMmtiZC5jCmluZGV4IDM5ZDgxNDkuLjcyNGE0NGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvcHMya2JkLmMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9wczJrYmQuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJZGV2aWNlX3Qga2JkZGV2IDsKIAljaGFyICpzdGRpbm5hbWUgID0gZ2V0ZW52ICgic3RkaW4iKTsKIAotCWlmKGlzYV9rYmRfaW5pdCgpPT0tMSkKKwlpZihpc2Ffa2JkX2luaXQoKSA9PSAtMSkKIAkJcmV0dXJuIC0xOwogCW1lbXNldCAoJmtiZGRldiwgMCwgc2l6ZW9mKGtiZGRldikpOwogCXN0cmNweShrYmRkZXYubmFtZSwgREVWTkFNRSk7CkBAIC01MTUsNyArNTE1LDcgQEAKIAlpbnQgdmFsOwogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwogCi0JdmFsPS0xOworCXZhbCA9IC0xOwogCXN0YXR1cyA9IGtiZF9yZWFkX3N0YXR1cygpOwogCWlmIChzdGF0dXMgJiBLQkRfU1RBVF9PQkYpIHsKIAkJdmFsID0ga2JkX3JlYWRfaW5wdXQoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdXNiX3VoY2kuYyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdXNiX3VoY2kuYwppbmRleCA0NzliZWVkLi4yNmNkY2RmIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3VzYl91aGNpLmMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS91c2JfdWhjaS5jCkBAIC01MTgsNyArNTE4LDcgQEAKIAl1aGNpX3RkX3QgKnRkLCpwcmV2dGQ7CiAKIAlmb3IoaT0wO2k8ODtpKyspIHsKLQkJcHJldnRkPSZ0ZF9pbnRbaV07IC8qIHRoZSBmaXJzdCBwcmV2aW91cyB0ZCBpcyB0aGUgc2tlbGV0b24gdGQgKi8KKwkJcHJldnRkID0gJnRkX2ludFtpXTsgLyogdGhlIGZpcnN0IHByZXZpb3VzIHRkIGlzIHRoZSBza2VsZXRvbiB0ZCAqLwogCQlsaW5rPXN3YXBfMzIodGRfaW50W2ldLmxpbmspICYgMHhmZmZmZmZmMDsgLyogbmV4dCBpbiBjaGFpbiAqLwogCQl0ZD0odWhjaV90ZF90ICopbGluazsgLyogYXNzaWduIGl0ICovCiAJCS8qIGFsbCBpbnRlcnJ1cHQgVERzIGFyZSBmaW5hbGx5IGxpbmtlZCB0byB0aGUgdGRfaW50WzBdLgpAQCAtNTk1LDcgKzU5NSw3IEBACiAKIAogCWJ1c2RldmZ1bmM9cGNpX2ZpbmRfZGV2aWNlKFVTQl9VSENJX1ZFTkRfSUQsVVNCX1VIQ0lfREVWX0lELDApOyAvKiBnZXQgUENJIERldmljZSBJRCAqLwotCWlmKGJ1c2RldmZ1bmM9PS0xKSB7CisJaWYoYnVzZGV2ZnVuYyA9PSAtMSkgewogCQlwcmludGYoIkVycm9yIFVTQiBVSENJICglMDRYLCUwNFgpIG5vdCBmb3VuZFxuIixVU0JfVUhDSV9WRU5EX0lELFVTQl9VSENJX0RFVl9JRCk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC02NDIsMTIgKzY0MiwxMiBAQAogICovCiBpbnQgdXNiX2xvd2xldmVsX3N0b3Aodm9pZCkKIHsKLQlpZihpcnF2ZWM9PS0xKQorCWlmKGlycXZlYyA9PSAtMSkKIAkJcmV0dXJuIDE7CiAJaXJxX2ZyZWVfaGFuZGxlcihpcnF2ZWMpOwogCWlycV9mcmVlX2hhbmRsZXIoMCk7CiAJcmVzZXRfaGMoKTsKLQlpcnF2ZWM9LTE7CisJaXJxdmVjID0gLTE7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9tZW51L21lbnUuYyBiL2JvYXJkL01BSS9tZW51L21lbnUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBjNjNhOC4uMDAwMDAwMAotLS0gYS9ib2FyZC9NQUkvbWVudS9tZW51LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0jaW5jbHVkZSAibWVudS5oIgotCi0jZGVmaW5lIFNJTkdMRV9CT1ggMAotI2RlZmluZSBET1VCTEVfQk9YIDEKLQotdm9pZCB2aWRlb19kcmF3X2JveChpbnQgc3R5bGUsIGludCBhdHRyLCBjaGFyICp0aXRsZSwgaW50IHNlcGFyYXRlLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7Ci12b2lkIHZpZGVvX2RyYXdfdGV4dChpbnQgeCwgaW50IHksIGludCBhdHRyLCBjaGFyICp0ZXh0KTsKLXZvaWQgdmlkZW9fc2F2ZV9yZWN0KGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCB2b2lkICpzYXZlX2FyZWEsIGludCBjbGVhcmNoYXIsIGludCBjbGVhcmF0dHIpOwotdm9pZCB2aWRlb19yZXN0b3JlX3JlY3QoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIHZvaWQgKnNhdmVfYXJlYSk7Ci1pbnQgIHZpZGVvX3Jvd3Modm9pZCk7Ci1pbnQgIHZpZGVvX2NvbHModm9pZCk7Ci0KLSNkZWZpbmUgTUFYX01FTlVfT1BUSU9OUyAyMDAKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBpbnQgdXNlZDsgICAgICAgICAgICAgICAgICAvKiBmbGFnIGlmIHRoaXMgZW50cnkgaXMgdXNlZCAqLwotICAgIGludCBlbnRyeV94OyAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBjb2x1bW4gb2YgdGhlIG1lbnUgZW50cnkgKi8KLSAgICBpbnQgZW50cnlfeTsgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgbGluZSBvZiB0aGUgZW50cnkgKi8KLSAgICBpbnQgb3B0aW9uX3g7ICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgY29sdW0gb2YgdGhlIG9wdGlvbiAoZW50cnkgaXMgc2FtZSkgKi8KLX0gb3B0aW9uX2RhdGFfdDsKLQotb3B0aW9uX2RhdGFfdCBvZGF0YVtNQVhfTUVOVV9PUFRJT05TXTsKLQotaW50IG5vcm1hbF9hdHRyID0gMHgwRjsKLWludCBzZWxlY3RfYXR0ciA9IDB4MkY7Ci1pbnQgZGlzYWJsZWRfYXR0ciA9IDB4MDc7Ci0KLW1lbnVfdCAqcm9vdF9tZW51OwotCi1pbnQgbWVudV9pbml0IChtZW51X3QgKnJvb3QpCi17Ci0gICAgY2hhciAqczsKLSAgICBpbnQgaTsKLQotICAgIHMgPSBnZXRlbnYoIm1lbnVfbm9ybWFsIik7Ci0gICAgaWYgKHMpIG5vcm1hbF9hdHRyID0gYXRvaShzKTsKLQotICAgIHMgPSBnZXRlbnYoIm1lbnVfc2VsZWN0Iik7Ci0gICAgaWYgKHMpIHNlbGVjdF9hdHRyID0gYXRvaShzKTsKLQotICAgIHMgPSBnZXRlbnYoIm1lbnVfZGlzYWJsZWQiKTsKLSAgICBpZiAocykgZGlzYWJsZWRfYXR0ciA9IGF0b2kocyk7Ci0KLSAgICBmb3IgKGk9MDsgaTxNQVhfTUVOVV9PUFRJT05TOyBpKyspIG9kYXRhW2ldLnVzZWQgPSAwOwotCi0gICAgcm9vdF9tZW51ID0gcm9vdDsKLX0KLQotb3B0aW9uX2RhdGFfdCAqbWVudV9hbGxvY19vZGF0YSh2b2lkKQotewotICAgIGludCBpOwotICAgIGZvciAoaW50IGk9MDsgaTxNQVhfTUVOVV9PUFRJT05TOyBpKyspCi0gICAgewotCWlmIChvZGF0YVtpXS51c2VkID09IDApIHJldHVybiAmb2RhdGFbaV07Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi12b2lkIG1lbnVfZnJlZV9vZGF0YShvcHRpb25fZGF0YV90ICpvZGF0YSkKLXsKLSAgICBvZGF0YS0+dXNlZCA9IDA7Ci19Ci0KLXZvaWQgbWVudV9sYXlvdXQgKG1lbnVfdCAqbWVudSkKLXsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9tZW51L21lbnUuaCBiL2JvYXJkL01BSS9tZW51L21lbnUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNkODlhNy4uMDAwMDAwMAotLS0gYS9ib2FyZC9NQUkvbWVudS9tZW51LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotI2lmbmRlZiBNRU5VX0gKLSNkZWZpbmUgTUVOVV9ICi0KLS8qIEEgc2luZ2xlIG1lbnUgKi8KLXR5cGVkZWYgdm9pZCAoKm1lbnVfZmluaXNoX2NhbGxiYWNrKShzdHJ1Y3QgbWVudV9zICptZW51KTsKLQotdHlwZWRlZiBzdHJ1Y3QgbWVudV9zIHsKLQljaGFyICpuYW1lOwkJLyogTWVudSBuYW1lICovCi0JaW50IG51bV9vcHRpb25zOwkvKiBOdW1iZXIgb2Ygb3B0aW9ucyBpbiB0aGlzIG1lbnUgKi8KLQlpbnQgZmxhZ3M7CQkvKiBWYXJpb3VzIGZsYWdzIC0gc2VlIGJlbG93ICovCi0JaW50IG9wdGlvbl9hbGlnbjsJLyogQWxpZ25zIG9wdGlvbnMgdG8gYSBmaWVsZCB3aWR0aCBvZiB0aGlzIG11Y2ggY2hhcmFjdGVycyBpZiAhPSAwICovCi0KLQlzdHJ1Y3QgbWVudV9vcHRpb25fcyAqKm9wdGlvbnM7CS8qIFBvaW50ZXIgdG8gdGhpcyBtZW51J3Mgb3B0aW9ucyAqLwotCW1lbnVfZmluaXNoX2NhbGxiYWNrIGNhbGxiYWNrOwkvKiBDYWxsZWQgd2hlbiB0aGUgbWVudSBjbG9zZXMgKi8KLX0gbWVudV90OwotCi0vKgotICogdHlwZTogVHlwZSBvZiB0aGUgb3B0aW9uIChzZWUgYmVsb3cpCi0gKiBuYW1lOiBOYW1lIHRvIGRpc3BsYXkgZm9yIHRoaXMgb3B0aW9uCi0gKiBoZWxwOiBPcHRpb25hbCBoZWxwIHN0cmluZwotICogaWQgIDogb3B0aW9uYWwgaWQgbnVtYmVyCi0gKiBzeXMgOiBwb2ludGVyIGZvciBzeXN0ZW0tc3BlY2lmaWMgZGF0YSwgaW5pdCB0byBOVUxMIGFuZCBkb24ndCB0b3VjaAotICovCi0KLSNkZWZpbmUgT1BUSU9OX1BSRUFNQkxFCQlcCi0JaW50IHR5cGU7CQlcCi0JY2hhciAqbmFtZTsJCVwKLQljaGFyICpoZWxwOwkJXAotCWludCBpZDsJCQlcCi0Jdm9pZCAqc3lzOwotCi0vKgotICogTWVudSBvcHRpb24gdHlwZXMuCi0gKiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IGxheW91dHMgZm9yIG1lbnUgb3B0aW9ucyBkZXBlbmRpbmcKLSAqIG9uIHRoZWlyIHR5cGVzLiBDdXJyZW50bHkgdGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcgcG9zc2liaWxpdGllczoKLSAqCi0gKiBTdWJtZW51OgotICogICBUaGlzIGVudHJ5IGxpbmtzIHRvIGEgbmV3IG1lbnUuCi0gKgotICogQm9vbGVhbjoKLSAqICAgQSBzaW1wbGUgb24vb2ZmIHRvZ2dsZSBlbnRyeS4gQm9vbGVhbnMgY2FuIGJlIGVpdGhlciB5ZXMvbm8sIDAvMSBvciBvbi9vZmYuCi0gKiAgIE9wdGlvbmFsbHksIHRoaXMgZW50cnkgY2FuIGVuYWJsZS9kaXNhYmxlIGEgc2V0IG9mIG90aGVyIG9wdGlvbnMuIEFuIGV4YW1wbGUgd291bGQKLSAqICAgYmUgdG8gZW5hYmxlL2Rpc2FibGUgb24tYm9hcmQgVVNCLCBhbmQgaWYgZW5hYmxlZCBnaXZlIGFjY2VzcyB0byBmdXJ0aGVyIG9wdGlvbnMgbGlrZQotICogICBpcnEgc2V0dGluZ3MsIGJhc2UgYWRkcmVzcyBldGMuCi0gKgotICogVGV4dDoKLSAqICAgQSBzaW5nbGUgbGluZS9saW1pdGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRleHQgZW50cnkgYm94LiBUZXh0IGNhbiBiZSByZXN0cmljdGVkCi0gKiAgIHRvIGEgY2VydGFpbiBjaGFyc2V0IChkaWdpdHMvaGV4IGRpZ2l0cy9hbGwvY3VzdG9tKS4gUmVzdWx0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGFuCi0gKiAgIGludCBpZiBudW1lcmljLgotICoKLSAqIFNlbGVjdGlvbjoKLSAqICAgT25lLW9mLW1hbnkgdHlwZSBvZiBzZWxlY3Rpb24gZW50cnkuIFVzZXIgbWF5IGNob29zZSBvbiBvZiBhIHNldCBvZiBzdHJpbmdzLCB3aGljaAotICogICBtYXBzIHRvIGEgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSB2YXJpYWJsZS4KLSAqCi0gKiBSb3V0aW5lOgotICogICBTZWxlY3RpbmcgdGhpcyBjYWxscyBhbiBlbnRyeS1zcGVjaWZpYyByb3V0aW5lLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBzYXZpbmcgY29udGVudHMgZXRjLgotICoKLSAqIEN1c3RvbToKLSAqICAgRGlzcGxheSBhbmQgYmVoYXZpb3VyIG9mIHRoaXMgZW50cnkgaXMgZGVmaW5lZCBieSBhIHNldCBvZiBjYWxsYmFja3MuCi0gKi8KLQotI2RlZmluZSBNRU5VX1NVQk1FTlVfVFlQRSAwCi10eXBlZGVmIHN0cnVjdCBtZW51X3N1Ym1lbnVfcwotewotICAgIE9QVElPTl9QUkVBTUJMRQotCi0gICAgbWVudV90ICogICBzdWJtZW51OyAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIHN1Ym1lbnUgKi8KLX0gbWVudV9zdWJtZW51X3Q7Ci0KLSNkZWZpbmUgTUVOVV9CT09MRUFOX1RZUEUgMQotdHlwZWRlZiBzdHJ1Y3QgbWVudV9ib29sZWFuX3MKLXsKLSAgICBPUFRJT05fUFJFQU1CTEUKLQotICAgIGNoYXIgKnZhcmlhYmxlOyAgICAgICAgICAgICAgICAvKiBOYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBnZXRlbnYoKS9zZXRlbnYoKSAqLwotICAgIGludCBzdWJ0eXBlOyAgICAgICAgICAgICAgICAgICAvKiBTdWJ0eXBlIChvbi9vZmYsIDAvMSwgeWVzL25vLCBlbmFibGUvZGlzYWJsZSksIHNlZSBiZWxvdyAqLwotICAgIGludCBtdXRleDsgICAgICAgICAgICAgICAgICAgICAvKiBCaXQgbWFzayBvZiBvcHRpb25zIHRvIGVuYWJsZS9kaXNhYmxlLiBCaXQgMCBpcyB0aGUgb3B0aW9uCi0JCQkJICAgICAgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgb25lLCBiaXQgMSBpcyB0aGUgbmV4dCBvbmUgZXRjLgotCQkJCSAgICAgIGJpdCA3ID0gMCBtZWFucyB0byBkaXNhYmxlIHdoZW4gdGhpcyBvcHRpb24gaXMgb2ZmLAotCQkJCSAgICAgIGJpdCA3ID0gMSBtZWFucyB0byBkaXNhYmxlIHdoZW4gdGhpcyBvcHRpb24gaXMgb24uCi0JCQkJICAgICAgQW4gb3B0aW9uIGlzIGRpc2FibGVkIHdoZW4gdGhlIHR5cGUgZmllbGQncyB1cHBlciBiaXQgaXMgc2V0ICovCi19IG1lbnVfYm9vbGVhbl90OwotCi0vKiBCT09MRUFOIE1lbnUgZmxhZ3MgKi8KLSNkZWZpbmUgTUVOVV9CT09MRUFOX09OT0ZGICAgICAgICAgMHgwMQotI2RlZmluZSBNRU5VX0JPT0xFQU5fMDEgICAgICAgICAgICAweDAyCi0jZGVmaW5lIE1FTlVfQk9PTEVBTl9ZRVNOTyAgICAgICAgIDB4MDMKLSNkZWZpbmUgTUVOVV9CT09MRUFOX0VORElTICAgICAgICAgMHgwNAotI2RlZmluZSBNRU5VX0JPT0xFQU5fVFlQRV9NQVNLICAgICAweDA3Ci0KLQotI2RlZmluZSBNRU5VX1RFWFRfVFlQRSAyCi10eXBlZGVmIHN0cnVjdCBtZW51X3RleHRfcwotewotICAgIE9QVElPTl9QUkVBTUJMRQotCi0gICAgY2hhciAqdmFyaWFibGU7ICAgICAgICAgICAgICAgIC8qIE5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGdldGVudigpL3NldGVudigpICovCi0gICAgaW50IG1heGNoYXJzOyAgICAgICAgICAgICAgICAgIC8qIE1heCBudW1iZXIgb2YgY2hhcmFjdGVycyAqLwotICAgIGNoYXIgKmNoYXJzZXQ7ICAgICAgICAgICAgICAgICAvKiBPcHRpb25hbCBjaGFyc2V0IHRvIHVzZSAqLwotICAgIGludCBmbGFnczsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFncyAtIHNlZSBiZWxvdyAqLwotfSBtZW51X3RleHRfdDsKLQotLyogVEVYVCBlbnRyeSBtZW51IGZsYWdzICovCi0jZGVmaW5lIE1FTlVfVEVYVF9OVU1FUklDICAgICAgICAgMHgwMQotI2RlZmluZSBNRU5VX1RFWFRfSEVYQURFQ0lNQUwgICAgIDB4MDIKLSNkZWZpbmUgTUVOVV9URVhUX0ZSRUUgICAgICAgICAgICAweDAzCi0jZGVmaW5lIE1FTlVfVEVYVF9UWVBFX01BU0sgICAgICAgMHgwNwotCi0KLSNkZWZpbmUgTUVOVV9TRUxFQ1RJT05fVFlQRSAzCi10eXBlZGVmIHN0cnVjdCBtZW51X3NlbGVjdF9vcHRpb25fcyB7Ci0JY2hhciAqbWFwX2Zyb207CQkvKiBNYXAgdGhpcyB2YXJpYWJsZSBjb250ZW50cyAuLi4gKi8KLQljaGFyICptYXBfdG87CQkvKiAuLi4gdG8gdGhpcyBtZW51IHRleHQgYW5kIHZpY2UgdmVyc2EgKi8KLX0gbWVudV9zZWxlY3Rfb3B0aW9uX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IG1lbnVfc2VsZWN0X3MgewotCU9QVElPTl9QUkVBTUJMRSBpbnQgbnVtX29wdGlvbnM7CS8qIE51bWJlciBvZiBtYXBwaW5ncyAqLwotCW1lbnVfc2VsZWN0X29wdGlvbl90ICoqb3B0aW9uczsKLQkvKiBPcHRpb24gbGlzdCBhcnJheSAqLwotfSBtZW51X3NlbGVjdF90OwotCi0KLSNkZWZpbmUgTUVOVV9ST1VUSU5FX1RZUEUgNAotdHlwZWRlZiB2b2lkICgqbWVudV9yb3V0aW5lX2NhbGxiYWNrKSAoc3RydWN0IG1lbnVfcm91dGluZV9zICopOwotCi10eXBlZGVmIHN0cnVjdCBtZW51X3JvdXRpbmVfcyB7Ci0JT1BUSU9OX1BSRUFNQkxFIG1lbnVfcm91dGluZV9jYWxsYmFjayBjYWxsYmFjazsKLQkvKiByb3V0aW5lIHRvIGJlIGNhbGxlZCAqLwotCXZvaWQgKnVzZXJfZGF0YTsJLyogVXNlciBkYXRhLCBkb24ndCBjYXJlIGZvciBzeXN0ZW0gKi8KLX0gbWVudV9yb3V0aW5lX3Q7Ci0KLQotI2RlZmluZSBNRU5VX0NVU1RPTV9UWVBFIDUKLXR5cGVkZWYgdm9pZCAoKm1lbnVfY3VzdG9tX2RyYXcpIChzdHJ1Y3QgbWVudV9jdXN0b21fcyAqKTsKLXR5cGVkZWYgdm9pZCAoKm1lbnVfY3VzdG9tX2tleSkgKHN0cnVjdCBtZW51X2N1c3RvbV9zICosIGludCk7Ci0KLXR5cGVkZWYgc3RydWN0IG1lbnVfY3VzdG9tX3MgewotCU9QVElPTl9QUkVBTUJMRSBtZW51X2N1c3RvbV9kcmF3IGRyYXdmdW5jOwotCW1lbnVfY3VzdG9tX2tleSBrZXlmdW5jOwotCXZvaWQgKnVzZXJfZGF0YTsKLX0gbWVudV9jdXN0b21fdDsKLQotLyoKLSAqIFRoZSBtZW51IG9wdGlvbiBzdXBlcnN0cnVjdHVyZQotICovCi10eXBlZGVmIHN0cnVjdCBtZW51X29wdGlvbl9zIHsKLQl1bmlvbiB7Ci0JCW1lbnVfc3VibWVudV90IG1fc3ViX21lbnU7Ci0JCW1lbnVfYm9vbGVhbl90IG1fYm9vbGVhbjsKLQkJbWVudV90ZXh0X3QgbV90ZXh0OwotCQltZW51X3NlbGVjdF90IG1fc2VsZWN0OwotCQltZW51X3JvdXRpbmVfdCBtX3JvdXRpbmU7Ci0JfTsKLX0gbWVudV9vcHRpb25fdDsKLQotLyogSW5pdCB0aGUgbWVudSBzeXN0ZW0uIFJldHVybnMgPDAgb24gZXJyb3IgKi8KLWludCBtZW51X2luaXQobWVudV90ICpyb290KTsKLQotLyogRXhlY3V0ZSBhIHNpbmdsZSBtZW51LiBSZXR1cm5zIDwwIG9uIGVycm9yICovCi1pbnQgbWVudV9kbyhtZW51X3QgKm1lbnUpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2FkczUxMjEvTWFrZWZpbGUgYi9ib2FyZC9hZHM1MTIxL01ha2VmaWxlCmluZGV4IDUyZDBkM2MuLjViOTU2ODIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FkczUxMjEvTWFrZWZpbGUKKysrIGIvYm9hcmQvYWRzNTEyMS9NYWtlZmlsZQpAQCAtMjcsNyArMjcsNyBAQAogCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLUNPQkpTLXkJOj0gJChCT0FSRCkubworQ09CSlMteQk6PSAkKEJPQVJEKS5vIGlvcGluLm8KIENPQkpTLSR7Q09ORklHX0ZTTF9ESVVfRkJ9ICs9IGFkczUxMjFfZGl1Lm8KIENPQkpTLSR7Q09ORklHX0ZTTF9ESVVfRkJ9ICs9IC4uL2ZyZWVzY2FsZS9jb21tb24vZnNsX2RpdV9mYi5vCiBDT0JKUy0ke0NPTkZJR19GU0xfRElVX0ZCfSArPSAuLi9mcmVlc2NhbGUvY29tbW9uL2ZzbF9sb2dvX2JtcC5vCmRpZmYgLS1naXQgYS9ib2FyZC9hZHM1MTIxL1JFQURNRSBiL2JvYXJkL2FkczUxMjEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZmNkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hZHM1MTIxL1JFQURNRQpAQCAtMCwwICsxLDcgQEAKK1RvIGNvbmZpZ3VyZSBmb3IgdGhlIGN1cnJlbnQgKFJldiAzLngpIEFEUzUxMjEKKwltYWtlIGFkczUxMjFfY29uZmlnCitUaGlzIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlIFBDSSwgdGhlIFJlYWwgVGltZSBDTG9jaywgYWRkIGJhY2t1cCBmbGFzaAorYWJpbGl0eSBhbmQgc2V0IHRoZSBjb3JyZWN0IGZyZXF1ZW5jeSBhbmQgbWVtb3J5IGNvbmZpZ3VyYXRpb24uCisKK1RvIGNvbmZpZ3VyZSBmb3IgdGhlIG9sZGVyIFJldiAyIEFEUzUxMjEgdHlwZSAodGhpcyB3aWxsIG5vdCBoYXZlIFBDSSkKKwltYWtlIGFkczUxMjFfcmV2Ml9jb25maWcKZGlmZiAtLWdpdCBhL2JvYXJkL2FkczUxMjEvYWRzNTEyMS5jIGIvYm9hcmQvYWRzNTEyMS9hZHM1MTIxLmMKaW5kZXggZWY2NjY2My4uODQ1MjA1NCAxMDA2NDQKLS0tIGEvYm9hcmQvYWRzNTEyMS9hZHM1MTIxLmMKKysrIGIvYm9hcmQvYWRzNTEyMS9hZHM1MTIxLmMKQEAgLTIzLDkgKzIzLDE0IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxtcGM1MTJ4Lmg+CisjaW5jbHVkZSAiaW9waW4uaCIKICNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPGZkdF9zdXBwb3J0Lmg+CisjaWZkZWYgQ09ORklHX01JU0NfSU5JVF9SCisjaW5jbHVkZSA8aTJjLmg+CisjZW5kaWYKKyNpbmNsdWRlICJpb3Bpbi5oIgkvKiBmb3IgaW9waW5faW5pdGlhbGl6ZSgpIHByb3RvdHlwZSAqLwogCiAvKiBDbG9ja3MgaW4gdXNlICovCiAjZGVmaW5lIFNDQ1IxX0NMT0NLU19FTgkoQ0xPQ0tfU0NDUjFfQ0ZHX0VOIHwJCQkJXApAQCAtNDUsMjkgKzUwLDEyIEBACiAjZGVmaW5lIENTQVdfU1RBUlQoc3RhcnQpCSgoc3RhcnQpICYgMHhGRkZGMDAwMCkKICNkZWZpbmUgQ1NBV19TVE9QKHN0YXJ0LCBzaXplKQkoKChzdGFydCkgKyAoc2l6ZSkgLSAxKSA+PiAxNikKIAotI2RlZmluZSBNUEM1MTIxX0lPQ1RMX1BTQzZfMAkoMHgyODQvNCkKLSNkZWZpbmUgTVBDNTEyMV9JT19ESVVfU1RBUlQJKDB4Mjg4LzQpCi0jZGVmaW5lIE1QQzUxMjFfSU9fRElVX0VORAkoMHgyZmMvNCkKLQotLyogRnVuY3Rpb25hbCBwaW4gbXV4aW5nICovCi0jZGVmaW5lIE1QQzUxMjFfSU9fRlVOQzEJKDAgPDwgNykKLSNkZWZpbmUgTVBDNTEyMV9JT19GVU5DMgkoMSA8PCA3KQotI2RlZmluZSBNUEM1MTIxX0lPX0ZVTkMzCSgyIDw8IDcpCi0jZGVmaW5lIE1QQzUxMjFfSU9fRlVOQzQJKDMgPDwgNykKLSNkZWZpbmUgTVBDNTEyMV9JT19TVAkJKDEgPDwgMikKLSNkZWZpbmUgTVBDNTEyMV9JT19EU18xCQkoMCkKLSNkZWZpbmUgTVBDNTEyMV9JT19EU18yCQkoMSkKLSNkZWZpbmUgTVBDNTEyMV9JT19EU18zCQkoMikKLSNkZWZpbmUgTVBDNTEyMV9JT19EU180CQkoMykKLQogbG9uZyBpbnQgZml4ZWRfc2RyYW0odm9pZCk7CiAKIGludCBib2FyZF9lYXJseV9pbml0X2YgKHZvaWQpCiB7CiAJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKLQl1MzIgbHBjYXcsIHRtcDMyOwotCXZvbGF0aWxlIGlvY3RybDUxMnhfdCAqaW9jdGwgPSAmKGltLT5pb19jdHJsKTsKLQlpbnQgaTsKKwl1MzIgbHBjYXc7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgTG9jYWwgV2luZG93IGZvciB0aGUgQ1BMRCByZWdpc3RlcnMgYWNjZXNzIChDUzIgc2VsZWN0cwpAQCAtOTEsMjQgKzc5LDI3IEBACiAJICogV2l0aG91dCB0aGlzIHRoZSBmbGFzaCBpZGVudGlmaWNhdGlvbiByb3V0aW5lIGZhaWxzLCBhcyBpdCBuZWVkcyB0byBpc3N1ZQogCSAqIHdyaXRlIGNvbW1hbmRzIGluIG9yZGVyIHRvIGVzdGFibGlzaCB0aGUgZGV2aWNlIElELgogCSAqLwotCSooKHZvbGF0aWxlIHU4ICopKENGR19DUExEX0JBU0UgKyAweDA4KSkgPSAweEMxOwogCisjaWZkZWYgQ09ORklHX0FEUzUxMjFfUkVWMgorCSooKHZvbGF0aWxlIHU4ICopKENGR19DUExEX0JBU0UgKyAweDA4KSkgPSAweEMxOworI2Vsc2UKKwlpZiAoKigodTggKikoQ0ZHX0NQTERfQkFTRSArIDB4MDgpKSAmIDB4MDQpIHsKKwkJKigodm9sYXRpbGUgdTggKikoQ0ZHX0NQTERfQkFTRSArIDB4MDgpKSA9IDB4QzE7CisJfSBlbHNlIHsKKwkJLyogcnVubmluZyBmcm9tIEJhY2t1cCBmbGFzaCAqLworCQkqKCh2b2xhdGlsZSB1OCAqKShDRkdfQ1BMRF9CQVNFICsgMHgwOCkpID0gMHgzMjsKKwl9CisjZW5kaWYKKwkvKgorCSAqIENvbmZpZ3VyZSBGbGFzaCBTcGVlZAorCSAqLworCSooKHZvbGF0aWxlIHUzMiAqKShDRkdfSU1NUiArIExQQ19PRkZTRVQgKyBDUzBfQ09ORklHKSkgPSBDRkdfQ1MwX0NGRzsKIAkvKgogCSAqIEVuYWJsZSBjbG9ja3MKIAkgKi8KIAlpbS0+Y2xrLnNjY3JbMF0gPSBTQ0NSMV9DTE9DS1NfRU47CiAJaW0tPmNsay5zY2NyWzFdID0gU0NDUjJfQ0xPQ0tTX0VOOwogCi0JLyogQ29uZmlndXJlIERJVSBjbG9jayBwaW4gKi8KLQl0bXAzMiA9IGlvY3RsLT5yZWdzW01QQzUxMjFfSU9DVExfUFNDNl8wXTsKLQl0bXAzMiAmPSB+MHgxZmY7Ci0JdG1wMzIgfD0gTVBDNTEyMV9JT19GVU5DMyB8IE1QQzUxMjFfSU9fRFNfNDsKLQlpb2N0bC0+cmVnc1tNUEM1MTIxX0lPQ1RMX1BTQzZfMF0gPSB0bXAzMjsKLQotCS8qIEluaXRpYWxpemUgSU8gcGlucyAocGluIG11eCkgZm9yIERJVSBmdW5jdGlvbiAqLwotCWZvciAoaSA9IE1QQzUxMjFfSU9fRElVX1NUQVJUOyBpIDwgTVBDNTEyMV9JT19ESVVfRU5EOyBpKyspCi0JCWlvY3RsLT5yZWdzW2ldIHw9IChNUEM1MTIxX0lPX0ZVTkMzIHwgTVBDNTEyMV9JT19EU180KTsKLQogCXJldHVybiAwOwogfQogCkBAIC0yMTcsNiArMjA4LDcgQEAKIGludCBtaXNjX2luaXRfcih2b2lkKQogewogCXU4IHRtcF92YWw7CisJZXh0ZXJuIGludCBhZHM1MTIxX2RpdV9pbml0KHZvaWQpOwogCiAJLyogVXNpbmcgdGhpcyBmb3IgRElVIGluaXQgYmVmb3JlIHRoZSBkcml2ZXIgaW4gbGludXggdGFrZXMgb3ZlcgogCSAqICBFbmFibGUgdGhlIFRGUDQxMCBFbmNvZGVyIChJMkMgYWRkcmVzcyAweDM4KQpAQCAtMjUwLDE3ICsyNDIsMTIgQEAKIHsKIAl1c2hvcnQgYnJkX3JldiA9ICoodnVfc2hvcnQgKikgKENGR19DUExEX0JBU0UgKyAweDAwKTsKIAl1Y2hhciBjcGxkX3JldiA9ICoodnVfY2hhciAqKSAoQ0ZHX0NQTERfQkFTRSArIDB4MDIpOwotCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcmVnOwotCWludCBpOwogCiAJcHJpbnRmICgiQm9hcmQ6IEFEUzUxMjEgcmV2LiAweCUwNHggKENQTEQgcmV2LiAweCUwMngpXG4iLAogCQlicmRfcmV2LCBjcGxkX3Jldik7CisJLyogaW5pdGlhbGl6ZSBmdW5jdGlvbiBtdXggJiBzbGV3IHJhdGUgSU8gaW50ZXIgYWxpYSBvbiBJTyBQaW5zICAqLworCWlvcGluX2luaXRpYWxpemUoKTsKIAotCS8qIGNoYW5nZSB0aGUgc2xldyByYXRlIG9uIGFsbCBwYXRhIHBpbnMgdG8gbWF4ICovCi0JcmVnID0gKHVuc2lnbmVkIGxvbmcgKikgJihpbS0+aW9fY3RybC5yZWdzW1BBVEFfQ0UxX0lEWF0pOwotCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCi0JCXJlZ1tpXSB8PSAweDAwMDAwMDAzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9ib2FyZC9hZHM1MTIxL2FkczUxMjFfZGl1LmMgYi9ib2FyZC9hZHM1MTIxL2FkczUxMjFfZGl1LmMKaW5kZXggODdjZjBjYi4uMjY2MjhkMyAxMDA2NDQKLS0tIGEvYm9hcmQvYWRzNTEyMS9hZHM1MTIxX2RpdS5jCisrKyBiL2JvYXJkL2FkczUxMjEvYWRzNTEyMV9kaXUuYwpAQCAtNTcsNyArNTcsNyBAQAogCS8qIE1vZGlmeSBQWENMSyBpbiBHVVRTIENMS0RWRFIgKi8KIAlkZWJ1ZygiRElVOiBDdXJyZW50IHZhbHVlIG9mIENMS0RWRFIgPSAweCUwOHhcbiIsICpjbGtkdmRyKTsKIAl0ZW1wID0gKmNsa2R2ZHIgJiAweEZGRkZGRjAwOwotCSpjbGtkdmRyID0gdGVtcCB8IChwaXh2YWwgJiAweDFGKTsKKwkqY2xrZHZkciA9IHRlbXAgfCAocGl4dmFsICYgMHhGRik7CiAJZGVidWcoIkRJVTogTW9kaWZpZWQgdmFsdWUgb2YgQ0xLRFZEUiA9IDB4JTA4eFxuIiwgKmNsa2R2ZHIpOwogfQogCmRpZmYgLS1naXQgYS9ib2FyZC9hZHM1MTIxL2lvcGluLmMgYi9ib2FyZC9hZHM1MTIxL2lvcGluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3OTJhMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FkczUxMjEvaW9waW4uYwpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogTWFydGhhIEogTWFyeCwgU2lsaWNvbiBUdXJua2V5IEV4cHJlc3MsIG1tYXJ4QHNpbGljb250a3guY29tCisgKiBtcGM1MTJ4IEkvTyBwaW4vcGFkIGluaXRpYWxpemF0aW9uIGZvciB0aGUgQURTNTEyMSBib2FyZAorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAiaW9waW4uaCIKKworLyogSU8gcGluIGZpZWxkcyAqLworI2RlZmluZSBJT19QSU5fRk1VWCh2KQkoKHYpIDw8IDcpCS8qIHBpbiBmdW5jdGlvbiAqLworI2RlZmluZSBJT19QSU5fSE9MRCh2KQkoKHYpIDw8IDUpCS8qIGhvbGQgdGltZSwgcGNpIG9ubHkgKi8KKyNkZWZpbmUgSU9fUElOX1BVRCh2KQkoKHYpIDw8IDQpCS8qIGlmIFBVRSwgMD1wdWxsLWRvd24sIDE9cHVsbC11cCAqLworI2RlZmluZSBJT19QSU5fUFVFKHYpCSgodikgPDwgMykJLyogcHVsbCB1cC9kb3duIGVuYWJsZSAqLworI2RlZmluZSBJT19QSU5fU1QodikJKCh2KSA8PCAyKQkvKiBzY2htaXR0IHRyaWdnZXIgKi8KKyNkZWZpbmUgSU9fUElOX0RTKHYpCSgodikpCQkvKiBzbGV3IHJhdGUgKi8KKworc3RhdGljIHN0cnVjdCBpb3Bpbl90IHsKKwlpbnQgcF9vZmZzZXQ7CQkvKiBvZmZzZXQgZnJvbSBJT0NUTF9NRU1fT0ZGU0VUICovCisJaW50IG5yX3BpbnM7CQkvKiBudW1iZXIgb2YgcGlucyB0byBzZXQgdGhpcyB3YXkgKi8KKwlpbnQgYml0X29yOwkJLyogb3IgaW4gdGhlIHZhbHVlIGluc3RlYWQgb2Ygb3ZlcndyaXRlICovCisJdV9sb25nIHZhbDsJCS8qIHZhbHVlIHRvIHdyaXRlIG9yIG9yICovCit9IGlvcmVnc19pbml0W10gPSB7CisJLyogRlVOQzE9RkVDX1JYX0RWIFNldHMgTmV4dCAzIHRvIEZFQyBwYWRzICovCisJeworCQlJT0NUTF9TUERJRl9UWENMSywgMywgMCwKKwkJSU9fUElOX0ZNVVgoMSkgfCBJT19QSU5fSE9MRCgwKSB8IElPX1BJTl9QVUQoMCkgfAorCQlJT19QSU5fUFVFKDApIHwgSU9fUElOX1NUKDApIHwgSU9fUElOX0RTKDMpCisJfSwKKwkvKiBTZXQgaGlnaGVzdCBTbGV3IG9uIDkgUEFUQSBwaW5zICovCisJeworCQlJT0NUTF9QQVRBX0NFMSwgOSwgMSwKKwkJSU9fUElOX0ZNVVgoMCkgfCBJT19QSU5fSE9MRCgwKSB8IElPX1BJTl9QVUQoMCkgfAorCQlJT19QSU5fUFVFKDApIHwgSU9fUElOX1NUKDApIHwgSU9fUElOX0RTKDMpCisJfSwKKwkvKiBGVU5DMT1GRUNfQ09MIFNldHMgTmV4dCAxNSB0byBGRUMgcGFkcyAqLworCXsKKwkJSU9DVExfUFNDMF8wLCAxNSwgMCwKKwkJSU9fUElOX0ZNVVgoMSkgfCBJT19QSU5fSE9MRCgwKSB8IElPX1BJTl9QVUQoMCkgfAorCQlJT19QSU5fUFVFKDApIHwgSU9fUElOX1NUKDApIHwgSU9fUElOX0RTKDMpCisJfSwKKwkvKiBGVU5DMT1TUERJRl9UWENMSyAqLworCXsKKwkJSU9DVExfTFBDX0NTMSwgMSwgMCwKKwkJSU9fUElOX0ZNVVgoMSkgfCBJT19QSU5fSE9MRCgwKSB8IElPX1BJTl9QVUQoMCkgfAorCQlJT19QSU5fUFVFKDApIHwgSU9fUElOX1NUKDEpIHwgSU9fUElOX0RTKDMpCisJfSwKKwkvKiBGVU5DMj1TUERJRl9UWCBhbmQgc2V0cyBOZXh0IHBpbiB0byBTUERJRl9SWCAqLworCXsKKwkJSU9DVExfSTJDMV9TQ0wsIDIsIDAsCisJCUlPX1BJTl9GTVVYKDIpIHwgSU9fUElOX0hPTEQoMCkgfCBJT19QSU5fUFVEKDApIHwKKwkJSU9fUElOX1BVRSgwKSB8IElPX1BJTl9TVCgxKSB8IElPX1BJTl9EUygzKQorCX0sCisJLyogRlVOQzI9RElVIENMSyAqLworCXsKKwkJSU9DVExfUFNDNl8wLCAxLCAwLAorCQlJT19QSU5fRk1VWCgyKSB8IElPX1BJTl9IT0xEKDApIHwgSU9fUElOX1BVRCgwKSB8CisJCUlPX1BJTl9QVUUoMCkgfCBJT19QSU5fU1QoMSkgfCBJT19QSU5fRFMoMykKKwl9LAorCS8qIEZVTkMyPURJVV9IU1lOQyAqLworCXsKKwkJSU9DVExfUFNDNl8xLCAxLCAwLAorCQlJT19QSU5fRk1VWCgyKSB8IElPX1BJTl9IT0xEKDApIHwgSU9fUElOX1BVRCgwKSB8CisJCUlPX1BJTl9QVUUoMCkgfCBJT19QSU5fU1QoMCkgfCBJT19QSU5fRFMoMykKKwl9LAorCS8qIEZVTkMyPURJVVZTWU5DIFNldHMgTmV4dCAyNiB0byBESVUgUGFkcyAqLworCXsKKwkJSU9DVExfUFNDNl80LCAyNiwgMCwKKwkJSU9fUElOX0ZNVVgoMikgfCBJT19QSU5fSE9MRCgwKSB8IElPX1BJTl9QVUQoMCkgfAorCQlJT19QSU5fUFVFKDApIHwgSU9fUElOX1NUKDApIHwgSU9fUElOX0RTKDMpCisJfQorfTsKKwordm9pZCBpb3Bpbl9pbml0aWFsaXplKHZvaWQpCit7CisJc2hvcnQgaSwgaiwgbiwgcDsKKwl1X2xvbmcgKnJlZzsKKwlpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisKKwlyZWcgPSAodV9sb25nICopJihpbS0+aW9fY3RybC5yZWdzWzBdKTsKKworCWlmIChzaXplb2YoaW9yZWdzX2luaXQpID09IDApCisJCXJldHVybjsKKworCW4gPSBzaXplb2YoaW9yZWdzX2luaXQpIC8gc2l6ZW9mKGlvcmVnc19pbml0WzBdKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZm9yIChwID0gMCwgaiA9IGlvcmVnc19pbml0W2ldLnBfb2Zmc2V0IC8gc2l6ZW9mKHVfbG9uZyk7CisJCQlwIDwgaW9yZWdzX2luaXRbaV0ubnJfcGluczsgcCsrLCBqKyspIHsKKwkJCWlmIChpb3JlZ3NfaW5pdFtpXS5iaXRfb3IpCisJCQkJcmVnW2pdIHw9IGlvcmVnc19pbml0W2ldLnZhbDsKKwkJCWVsc2UKKwkJCQlyZWdbal0gPSBpb3JlZ3NfaW5pdFtpXS52YWw7CisJCX0KKwl9CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYWRzNTEyMS9pb3Bpbi5oIGIvYm9hcmQvYWRzNTEyMS9pb3Bpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZjg0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hZHM1MTIxL2lvcGluLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIE1hcnRoYSBKIE1hcngsIFNpbGljb24gVHVybmtleSBFeHByZXNzLCBtbWFyeEBzaWxpY29udGt4LmNvbQorICogbXBjNTEyeCBJL08gcGluL3BhZCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIEFEUzUxMjEgYm9hcmQKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgSU9DVExfTUVNCQkweDAwMAorI2RlZmluZSBJT0NUTF9HUAkJMHgwMDQKKyNkZWZpbmUgSU9DVExfTFBDX0NMSwkJMHgwMDgKKyNkZWZpbmUgSU9DVExfTFBDX09FCQkweDAwQworI2RlZmluZSBJT0NUTF9MUENfUldCCQkweDAxMAorI2RlZmluZSBJT0NUTF9MUENfQUNLCQkweDAxNAorI2RlZmluZSBJT0NUTF9MUENfQ1MwCQkweDAxOAorI2RlZmluZSBJT0NUTF9ORkNfQ0UwCQkweDAxQworI2RlZmluZSBJT0NUTF9MUENfQ1MxCQkweDAyMAorI2RlZmluZSBJT0NUTF9MUENfQ1MyCQkweDAyNAorI2RlZmluZSBJT0NUTF9MUENfQVgwMwkJMHgwMjgKKyNkZWZpbmUgSU9DVExfRU1CX0FYMDIJCTB4MDJDCisjZGVmaW5lIElPQ1RMX0VNQl9BWDAxCQkweDAzMAorI2RlZmluZSBJT0NUTF9FTUJfQVgwMAkJMHgwMzQKKyNkZWZpbmUgSU9DVExfRU1CX0FEMzEJCTB4MDM4CisjZGVmaW5lIElPQ1RMX0VNQl9BRDMwCQkweDAzQworI2RlZmluZSBJT0NUTF9FTUJfQUQyOQkJMHgwNDAKKyNkZWZpbmUgSU9DVExfRU1CX0FEMjgJCTB4MDQ0CisjZGVmaW5lIElPQ1RMX0VNQl9BRDI3CQkweDA0OAorI2RlZmluZSBJT0NUTF9FTUJfQUQyNgkJMHgwNEMKKyNkZWZpbmUgSU9DVExfRU1CX0FEMjUJCTB4MDUwCisjZGVmaW5lIElPQ1RMX0VNQl9BRDI0CQkweDA1NAorI2RlZmluZSBJT0NUTF9FTUJfQUQyMwkJMHgwNTgKKyNkZWZpbmUgSU9DVExfRU1CX0FEMjIJCTB4MDVDCisjZGVmaW5lIElPQ1RMX0VNQl9BRDIxCQkweDA2MAorI2RlZmluZSBJT0NUTF9FTUJfQUQyMAkJMHgwNjQKKyNkZWZpbmUgSU9DVExfRU1CX0FEMTkJCTB4MDY4CisjZGVmaW5lIElPQ1RMX0VNQl9BRDE4CQkweDA2QworI2RlZmluZSBJT0NUTF9FTUJfQUQxNwkJMHgwNzAKKyNkZWZpbmUgSU9DVExfRU1CX0FEMTYJCTB4MDc0CisjZGVmaW5lIElPQ1RMX0VNQl9BRDE1CQkweDA3OAorI2RlZmluZSBJT0NUTF9FTUJfQUQxNAkJMHgwN0MKKyNkZWZpbmUgSU9DVExfRU1CX0FEMTMJCTB4MDgwCisjZGVmaW5lIElPQ1RMX0VNQl9BRDEyCQkweDA4NAorI2RlZmluZSBJT0NUTF9FTUJfQUQxMQkJMHgwODgKKyNkZWZpbmUgSU9DVExfRU1CX0FEMTAJCTB4MDhDCisjZGVmaW5lIElPQ1RMX0VNQl9BRDA5CQkweDA5MAorI2RlZmluZSBJT0NUTF9FTUJfQUQwOAkJMHgwOTQKKyNkZWZpbmUgSU9DVExfRU1CX0FEMDcJCTB4MDk4CisjZGVmaW5lIElPQ1RMX0VNQl9BRDA2CQkweDA5QworI2RlZmluZSBJT0NUTF9FTUJfQUQwNQkJMHgwQTAKKyNkZWZpbmUgSU9DVExfRU1CX0FEMDQJCTB4MEE0CisjZGVmaW5lIElPQ1RMX0VNQl9BRDAzCQkweDBBOAorI2RlZmluZSBJT0NUTF9FTUJfQUQwMgkJMHgwQUMKKyNkZWZpbmUgSU9DVExfRU1CX0FEMDEJCTB4MEIwCisjZGVmaW5lIElPQ1RMX0VNQl9BRDAwCQkweDBCNAorI2RlZmluZSBJT0NUTF9QQVRBX0NFMQkJMHgwQjgKKyNkZWZpbmUgSU9DVExfUEFUQV9DRTIJCTB4MEJDCisjZGVmaW5lIElPQ1RMX1BBVEFfSVNPTEFURQkweDBDMAorI2RlZmluZSBJT0NUTF9QQVRBX0lPUgkJMHgwQzQKKyNkZWZpbmUgSU9DVExfUEFUQV9JT1cJCTB4MEM4CisjZGVmaW5lIElPQ1RMX1BBVEFfSU9DSFJEWQkweDBDQworI2RlZmluZSBJT0NUTF9QQVRBX0lOVFJRCTB4MEQwCisjZGVmaW5lIElPQ1RMX1BBVEFfRFJRCQkweDBENAorI2RlZmluZSBJT0NUTF9QQVRBX0RBQ0sJCTB4MEQ4CisjZGVmaW5lIElPQ1RMX05GQ19XUAkJMHgwREMKKyNkZWZpbmUgSU9DVExfTkZDX1JCCQkweDBFMAorI2RlZmluZSBJT0NUTF9ORkNfQUxFCQkweDBFNAorI2RlZmluZSBJT0NUTF9ORkNfQ0xFCQkweDBFOAorI2RlZmluZSBJT0NUTF9ORkNfV0UJCTB4MEVDCisjZGVmaW5lIElPQ1RMX05GQ19SRQkJMHgwRjAKKyNkZWZpbmUgSU9DVExfUENJX0FEMzEJCTB4MEY0CisjZGVmaW5lIElPQ1RMX1BDSV9BRDMwCQkweDBGOAorI2RlZmluZSBJT0NUTF9QQ0lfQUQyOQkJMHgwRkMKKyNkZWZpbmUgSU9DVExfUENJX0FEMjgJCTB4MTAwCisjZGVmaW5lIElPQ1RMX1BDSV9BRDI3CQkweDEwNAorI2RlZmluZSBJT0NUTF9QQ0lfQUQyNgkJMHgxMDgKKyNkZWZpbmUgSU9DVExfUENJX0FEMjUJCTB4MTBDCisjZGVmaW5lIElPQ1RMX1BDSV9BRDI0CQkweDExMAorI2RlZmluZSBJT0NUTF9QQ0lfQUQyMwkJMHgxMTQKKyNkZWZpbmUgSU9DVExfUENJX0FEMjIJCTB4MTE4CisjZGVmaW5lIElPQ1RMX1BDSV9BRDIxCQkweDExQworI2RlZmluZSBJT0NUTF9QQ0lfQUQyMAkJMHgxMjAKKyNkZWZpbmUgSU9DVExfUENJX0FEMTkJCTB4MTI0CisjZGVmaW5lIElPQ1RMX1BDSV9BRDE4CQkweDEyOAorI2RlZmluZSBJT0NUTF9QQ0lfQUQxNwkJMHgxMkMKKyNkZWZpbmUgSU9DVExfUENJX0FEMTYJCTB4MTMwCisjZGVmaW5lIElPQ1RMX1BDSV9BRDE1CQkweDEzNAorI2RlZmluZSBJT0NUTF9QQ0lfQUQxNAkJMHgxMzgKKyNkZWZpbmUgSU9DVExfUENJX0FEMTMJCTB4MTNDCisjZGVmaW5lIElPQ1RMX1BDSV9BRDEyCQkweDE0MAorI2RlZmluZSBJT0NUTF9QQ0lfQUQxMQkJMHgxNDQKKyNkZWZpbmUgSU9DVExfUENJX0FEMTAJCTB4MTQ4CisjZGVmaW5lIElPQ1RMX1BDSV9BRDA5CQkweDE0QworI2RlZmluZSBJT0NUTF9QQ0lfQUQwOAkJMHgxNTAKKyNkZWZpbmUgSU9DVExfUENJX0FEMDcJCTB4MTU0CisjZGVmaW5lIElPQ1RMX1BDSV9BRDA2CQkweDE1OAorI2RlZmluZSBJT0NUTF9QQ0lfQUQwNQkJMHgxNUMKKyNkZWZpbmUgSU9DVExfUENJX0FEMDQJCTB4MTYwCisjZGVmaW5lIElPQ1RMX1BDSV9BRDAzCQkweDE2NAorI2RlZmluZSBJT0NUTF9QQ0lfQUQwMgkJMHgxNjgKKyNkZWZpbmUgSU9DVExfUENJX0FEMDEJCTB4MTZDCisjZGVmaW5lIElPQ1RMX1BDSV9BRDAwCQkweDE3MAorI2RlZmluZSBJT0NUTF9QQ0lfQ0JFMAkJMHgxNzQKKyNkZWZpbmUgSU9DVExfUENJX0NCRTEJCTB4MTc4CisjZGVmaW5lIElPQ1RMX1BDSV9DQkUyCQkweDE3QworI2RlZmluZSBJT0NUTF9QQ0lfQ0JFMwkJMHgxODAKKyNkZWZpbmUgSU9DVExfUENJX0dOVDIJCTB4MTg0CisjZGVmaW5lIElPQ1RMX1BDSV9SRVEyCQkweDE4OAorI2RlZmluZSBJT0NUTF9QQ0lfR05UMQkJMHgxOEMKKyNkZWZpbmUgSU9DVExfUENJX1JFUTEJCTB4MTkwCisjZGVmaW5lIElPQ1RMX1BDSV9HTlQwCQkweDE5NAorI2RlZmluZSBJT0NUTF9QQ0lfUkVRMAkJMHgxOTgKKyNkZWZpbmUgSU9DVExfUENJX0lOVEEJCTB4MTlDCisjZGVmaW5lIElPQ1RMX1BDSV9DTEsJCTB4MUEwCisjZGVmaW5lIElPQ1RMX1BDSV9SU1RfT1VUCTB4MUE0CisjZGVmaW5lIElPQ1RMX1BDSV9GUkFNRQkJMHgxQTgKKyNkZWZpbmUgSU9DVExfUENJX0lEU0VMCQkweDFBQworI2RlZmluZSBJT0NUTF9QQ0lfREVWU0VMCTB4MUIwCisjZGVmaW5lIElPQ1RMX1BDSV9JUkRZCQkweDFCNAorI2RlZmluZSBJT0NUTF9QQ0lfVFJEWQkJMHgxQjgKKyNkZWZpbmUgSU9DVExfUENJX1NUT1AJCTB4MUJDCisjZGVmaW5lIElPQ1RMX1BDSV9QQVIJCTB4MUMwCisjZGVmaW5lIElPQ1RMX1BDSV9QRVJSCQkweDFDNAorI2RlZmluZSBJT0NUTF9QQ0lfU0VSUgkJMHgxQzgKKyNkZWZpbmUgSU9DVExfU1BESUZfVFhDTEsJMHgxQ0MKKyNkZWZpbmUgSU9DVExfU1BESUZfVFgJCTB4MUQwCisjZGVmaW5lIElPQ1RMX1NQRElGX1JYCQkweDFENAorI2RlZmluZSBJT0NUTF9JMkMwX1NDTAkJMHgxRDgKKyNkZWZpbmUgSU9DVExfSTJDMF9TREEJCTB4MURDCisjZGVmaW5lIElPQ1RMX0kyQzFfU0NMCQkweDFFMAorI2RlZmluZSBJT0NUTF9JMkMxX1NEQQkJMHgxRTQKKyNkZWZpbmUgSU9DVExfSTJDMl9TQ0wJCTB4MUU4CisjZGVmaW5lIElPQ1RMX0kyQzJfU0RBCQkweDFFQworI2RlZmluZSBJT0NUTF9JUlEwCQkweDFGMAorI2RlZmluZSBJT0NUTF9JUlExCQkweDFGNAorI2RlZmluZSBJT0NUTF9DQU4xX1RYCQkweDFGOAorI2RlZmluZSBJT0NUTF9DQU4yX1RYCQkweDFGQworI2RlZmluZSBJT0NUTF9KMTg1MF9UWAkJMHgyMDAKKyNkZWZpbmUgSU9DVExfSjE4NTBfUlgJCTB4MjA0CisjZGVmaW5lIElPQ1RMX1BTQ19NQ0xLX0lOCTB4MjA4CisjZGVmaW5lIElPQ1RMX1BTQzBfMAkJMHgyMEMKKyNkZWZpbmUgSU9DVExfUFNDMF8xCQkweDIxMAorI2RlZmluZSBJT0NUTF9QU0MwXzIJCTB4MjE0CisjZGVmaW5lIElPQ1RMX1BTQzBfMwkJMHgyMTgKKyNkZWZpbmUgSU9DVExfUFNDMF80CQkweDIxQworI2RlZmluZSBJT0NUTF9QU0MxXzAJCTB4MjIwCisjZGVmaW5lIElPQ1RMX1BTQzFfMQkJMHgyMjQKKyNkZWZpbmUgSU9DVExfUFNDMV8yCQkweDIyOAorI2RlZmluZSBJT0NUTF9QU0MxXzMJCTB4MjJDCisjZGVmaW5lIElPQ1RMX1BTQzFfNAkJMHgyMzAKKyNkZWZpbmUgSU9DVExfUFNDMl8wCQkweDIzNAorI2RlZmluZSBJT0NUTF9QU0MyXzEJCTB4MjM4CisjZGVmaW5lIElPQ1RMX1BTQzJfMgkJMHgyM0MKKyNkZWZpbmUgSU9DVExfUFNDMl8zCQkweDI0MAorI2RlZmluZSBJT0NUTF9QU0MyXzQJCTB4MjQ0CisjZGVmaW5lIElPQ1RMX1BTQzNfMAkJMHgyNDgKKyNkZWZpbmUgSU9DVExfUFNDM18xCQkweDI0QworI2RlZmluZSBJT0NUTF9QU0MzXzIJCTB4MjUwCisjZGVmaW5lIElPQ1RMX1BTQzNfMwkJMHgyNTQKKyNkZWZpbmUgSU9DVExfUFNDM180CQkweDI1OAorI2RlZmluZSBJT0NUTF9QU0M0XzAJCTB4MjVDCisjZGVmaW5lIElPQ1RMX1BTQzRfMQkJMHgyNjAKKyNkZWZpbmUgSU9DVExfUFNDNF8yCQkweDI2NAorI2RlZmluZSBJT0NUTF9QU0M0XzMJCTB4MjY4CisjZGVmaW5lIElPQ1RMX1BTQzRfNAkJMHgyNkMKKyNkZWZpbmUgSU9DVExfUFNDNV8wCQkweDI3MAorI2RlZmluZSBJT0NUTF9QU0M1XzEJCTB4Mjc0CisjZGVmaW5lIElPQ1RMX1BTQzVfMgkJMHgyNzgKKyNkZWZpbmUgSU9DVExfUFNDNV8zCQkweDI3QworI2RlZmluZSBJT0NUTF9QU0M1XzQJCTB4MjgwCisjZGVmaW5lIElPQ1RMX1BTQzZfMAkJMHgyODQKKyNkZWZpbmUgSU9DVExfUFNDNl8xCQkweDI4OAorI2RlZmluZSBJT0NUTF9QU0M2XzIJCTB4MjhDCisjZGVmaW5lIElPQ1RMX1BTQzZfMwkJMHgyOTAKKyNkZWZpbmUgSU9DVExfUFNDNl80CQkweDI5NAorI2RlZmluZSBJT0NUTF9QU0M3XzAJCTB4Mjk4CisjZGVmaW5lIElPQ1RMX1BTQzdfMQkJMHgyOUMKKyNkZWZpbmUgSU9DVExfUFNDN18yCQkweDJBMAorI2RlZmluZSBJT0NUTF9QU0M3XzMJCTB4MkE0CisjZGVmaW5lIElPQ1RMX1BTQzdfNAkJMHgyQTgKKyNkZWZpbmUgSU9DVExfUFNDOF8wCQkweDJBQworI2RlZmluZSBJT0NUTF9QU0M4XzEJCTB4MkIwCisjZGVmaW5lIElPQ1RMX1BTQzhfMgkJMHgyQjQKKyNkZWZpbmUgSU9DVExfUFNDOF8zCQkweDJCOAorI2RlZmluZSBJT0NUTF9QU0M4XzQJCTB4MkJDCisjZGVmaW5lIElPQ1RMX1BTQzlfMAkJMHgyQzAKKyNkZWZpbmUgSU9DVExfUFNDOV8xCQkweDJDNAorI2RlZmluZSBJT0NUTF9QU0M5XzIJCTB4MkM4CisjZGVmaW5lIElPQ1RMX1BTQzlfMwkJMHgyQ0MKKyNkZWZpbmUgSU9DVExfUFNDOV80CQkweDJEMAorI2RlZmluZSBJT0NUTF9QU0MxMF8wCQkweDJENAorI2RlZmluZSBJT0NUTF9QU0MxMF8xCQkweDJEOAorI2RlZmluZSBJT0NUTF9QU0MxMF8yCQkweDJEQworI2RlZmluZSBJT0NUTF9QU0MxMF8zCQkweDJFMAorI2RlZmluZSBJT0NUTF9QU0MxMF80CQkweDJFNAorI2RlZmluZSBJT0NUTF9QU0MxMV8wCQkweDJFOAorI2RlZmluZSBJT0NUTF9QU0MxMV8xCQkweDJFQworI2RlZmluZSBJT0NUTF9QU0MxMV8yCQkweDJGMAorI2RlZmluZSBJT0NUTF9QU0MxMV8zCQkweDJGNAorI2RlZmluZSBJT0NUTF9QU0MxMV80CQkweDJGOAorI2RlZmluZSBJT0NUTF9IUkVTRVQJCTB4MkZDCisjZGVmaW5lIElPQ1RMX1NSRVNFVAkJMHgzMDAKKyNkZWZpbmUgSU9DVExfQ0tTVFBfT1VUCQkweDMwNAorI2RlZmluZSBJT0NUTF9VU0IyX1ZCVVNfUFdSX0ZBVUxUCTB4MzA4CisjZGVmaW5lIElPQ1RMX1VTQjJfVkJVU19QV1JfU0VMRUNUCTB4MzBDCisjZGVmaW5lIElPQ1RMX1VTQjJfUEhZX0RSVlZfQlVTCQkweDMxMAorCitleHRlcm4gdm9pZCBpb3Bpbl9pbml0aWFsaXplKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9rYXRtYWkva2F0bWFpLmMgYi9ib2FyZC9hbWNjL2thdG1haS9rYXRtYWkuYwppbmRleCAzYTBiMThmLi5mMmJlZDVjIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2thdG1haS9rYXRtYWkuYworKysgYi9ib2FyZC9hbWNjL2thdG1haS9rYXRtYWkuYwpAQCAtNTE3LDI0ICs1MTcsMyBAQAogCXJldHVybiAoY3RybGMoKSk7CiB9CiAjZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX09GX0xJQkZEVCkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCi12b2lkIGZ0X2JvYXJkX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQotewotCXUzMiB2YWxbNF07Ci0JaW50IHJjOwotCi0JZnRfY3B1X3NldHVwKGJsb2IsIGJkKTsKLQotCS8qIEZpeHVwIE5PUiBtYXBwaW5nICovCi0JdmFsWzBdID0gMDsJCQkJLyogY2hpcCBzZWxlY3QgbnVtYmVyICovCi0JdmFsWzFdID0gMDsJCQkJLyogYWx3YXlzIDAgKi8KLQl2YWxbMl0gPSBnZC0+YmQtPmJpX2ZsYXNoc3RhcnQ7Ci0JdmFsWzNdID0gZ2QtPmJkLT5iaV9mbGFzaHNpemU7Ci0JcmMgPSBmZHRfZmluZF9hbmRfc2V0cHJvcChibG9iLCAiL3BsYi9vcGIvZWJjIiwgInJhbmdlcyIsCi0JCQkJICB2YWwsIHNpemVvZih2YWwpLCAxKTsKLQlpZiAocmMpCi0JCXByaW50ZigiVW5hYmxlIHRvIHVwZGF0ZSBwcm9wZXJ0eSBOT1IgbWFwcGluZywgZXJyPSVzXG4iLAotCQkgICAgICAgZmR0X3N0cmVycm9yKHJjKSk7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mva2lsYXVlYS9raWxhdWVhLmMgYi9ib2FyZC9hbWNjL2tpbGF1ZWEva2lsYXVlYS5jCmluZGV4IGYzMGRjOGYuLjdiMTAyNTUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2Mva2lsYXVlYS9raWxhdWVhLmMKKysrIGIvYm9hcmQvYW1jYy9raWxhdWVhL2tpbGF1ZWEuYwpAQCAtMzc0LDI0ICszNzQsMyBAQAogCXJldHVybiAwOwkvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLwogfQogI2VuZGlmIC8qIENPTkZJR19QT1NUICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQotdm9pZCBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKLXsKLQl1MzIgdmFsWzRdOwotCWludCByYzsKLQotCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7Ci0KLQkvKiBGaXh1cCBOT1IgbWFwcGluZyAqLwotCXZhbFswXSA9IDA7CQkJCS8qIGNoaXAgc2VsZWN0IG51bWJlciAqLwotCXZhbFsxXSA9IDA7CQkJCS8qIGFsd2F5cyAwICovCi0JdmFsWzJdID0gZ2QtPmJkLT5iaV9mbGFzaHN0YXJ0OwotCXZhbFszXSA9IGdkLT5iZC0+YmlfZmxhc2hzaXplOwotCXJjID0gZmR0X2ZpbmRfYW5kX3NldHByb3AoYmxvYiwgIi9wbGIvb3BiL2ViYyIsICJyYW5nZXMiLAotCQkJCSAgdmFsLCBzaXplb2YodmFsKSwgMSk7Ci0JaWYgKHJjKQotCQlwcmludGYoIlVuYWJsZSB0byB1cGRhdGUgcHJvcGVydHkgTk9SIG1hcHBpbmcsIGVycj0lc1xuIiwKLQkJICAgICAgIGZkdF9zdHJlcnJvcihyYykpOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX09GX0xJQkZEVCkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApICovCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL21ha2FsdS9tYWthbHUuYyBiL2JvYXJkL2FtY2MvbWFrYWx1L21ha2FsdS5jCmluZGV4IDliYWVjOWEuLjJiNGQzZDQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvbWFrYWx1L21ha2FsdS5jCisrKyBiL2JvYXJkL2FtY2MvbWFrYWx1L21ha2FsdS5jCkBAIC0zMzAsMjQgKzMzMCwzIEBACiAJcmV0dXJuIDA7CS8qIE5vIGhvdGtleXMgc3VwcG9ydGVkICovCiB9CiAjZW5kaWYgLyogQ09ORklHX1BPU1QgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX09GX0xJQkZEVCkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCi12b2lkIGZ0X2JvYXJkX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQotewotCXUzMiB2YWxbNF07Ci0JaW50IHJjOwotCi0JZnRfY3B1X3NldHVwKGJsb2IsIGJkKTsKLQotCS8qIEZpeHVwIE5PUiBtYXBwaW5nICovCi0JdmFsWzBdID0gMDsJCQkJLyogY2hpcCBzZWxlY3QgbnVtYmVyICovCi0JdmFsWzFdID0gMDsJCQkJLyogYWx3YXlzIDAgKi8KLQl2YWxbMl0gPSBnZC0+YmQtPmJpX2ZsYXNoc3RhcnQ7Ci0JdmFsWzNdID0gZ2QtPmJkLT5iaV9mbGFzaHNpemU7Ci0JcmMgPSBmZHRfZmluZF9hbmRfc2V0cHJvcChibG9iLCAiL3BsYi9vcGIvZWJjIiwgInJhbmdlcyIsCi0JCQkJICB2YWwsIHNpemVvZih2YWwpLCAxKTsKLQlpZiAocmMpCi0JCXByaW50ZigiVW5hYmxlIHRvIHVwZGF0ZSBwcm9wZXJ0eSBOT1IgbWFwcGluZywgZXJyPSVzXG4iLAotCQkgICAgICAgZmR0X3N0cmVycm9yKHJjKSk7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9zZXF1b2lhLmMgYi9ib2FyZC9hbWNjL3NlcXVvaWEvc2VxdW9pYS5jCmluZGV4IDVmZjk3ODcuLmI4MzMwOTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9zZXF1b2lhLmMKKysrIGIvYm9hcmQvYW1jYy9zZXF1b2lhL3NlcXVvaWEuYwpAQCAtNTA5LDI0ICs1MDksMyBAQAogCXJldHVybiAwOwkvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLwogfQogI2VuZGlmIC8qIENPTkZJR19QT1NUICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQotdm9pZCBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKLXsKLQl1MzIgdmFsWzRdOwotCWludCByYzsKLQotCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7Ci0KLQkvKiBGaXh1cCBOT1IgbWFwcGluZyAqLwotCXZhbFswXSA9IDA7CQkJCS8qIGNoaXAgc2VsZWN0IG51bWJlciAqLwotCXZhbFsxXSA9IDA7CQkJCS8qIGFsd2F5cyAwICovCi0JdmFsWzJdID0gZ2QtPmJkLT5iaV9mbGFzaHN0YXJ0OwotCXZhbFszXSA9IGdkLT5iZC0+YmlfZmxhc2hzaXplOwotCXJjID0gZmR0X2ZpbmRfYW5kX3NldHByb3AoYmxvYiwgIi9wbGIvb3BiL2ViYyIsICJyYW5nZXMiLAotCQkJCSAgdmFsLCBzaXplb2YodmFsKSwgMSk7Ci0JaWYgKHJjKQotCQlwcmludGYoIlVuYWJsZSB0byB1cGRhdGUgcHJvcGVydHkgTk9SIG1hcHBpbmcsIGVycj0lc1xuIiwKLQkJICAgICAgIGZkdF9zdHJlcnJvcihyYykpOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX09GX0xJQkZEVCkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApICovCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3RhaXNoYW4vc2hvd2luZm8uYyBiL2JvYXJkL2FtY2MvdGFpc2hhbi9zaG93aW5mby5jCmluZGV4IDA0MGI4MDAuLjViOGI4OGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvdGFpc2hhbi9zaG93aW5mby5jCisrKyBiL2JvYXJkL2FtY2MvdGFpc2hhbi9zaG93aW5mby5jCkBAIC0zNCw1OSArMzQsNTkgQEAKIAkvKiByZWFkIGNsb2NrIHJlZ3NpdGVyICovCiAJcHJpbnRmKCI9PT09PSBEaXNwbGF5IHJlc2V0IGFuZCBpbml0aWFsaXplIHJlZ2lzdGVyIFN0YXJ0ID09PT09PT09PVxuIik7CiAJbWZjcHIoY2xrX3BsbGMscmVnKTsKLQlwcmludGYoImNwcl9wbGxjICAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoImNwcl9wbGxjICAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZmNwcihjbGtfcGxsZCxyZWcpOwotCXByaW50ZigiY3ByX3BsbGQgICA9ICUjMDEweFxuIixyZWcpOworCXByaW50ZigiY3ByX3BsbGQgICA9ICUjMDEwbHhcbiIscmVnKTsKIAogCW1mY3ByKGNsa19wcmltYWQscmVnKTsKLQlwcmludGYoImNwcl9wcmltYWQgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoImNwcl9wcmltYWQgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZmNwcihjbGtfcHJpbWJkLHJlZyk7Ci0JcHJpbnRmKCJjcHJfcHJpbWJkID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJjcHJfcHJpbWJkID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZjcHIoY2xrX29wYmQscmVnKTsKLQlwcmludGYoImNwcl9vcGJkICAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoImNwcl9vcGJkICAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZmNwcihjbGtfcGVyZCxyZWcpOwotCXByaW50ZigiY3ByX3BlcmQgICA9ICUjMDEweFxuIixyZWcpOworCXByaW50ZigiY3ByX3BlcmQgICA9ICUjMDEwbHhcbiIscmVnKTsKIAogCW1mY3ByKGNsa19tYWxkLHJlZyk7Ci0JcHJpbnRmKCJjcHJfbWFsZCAgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJjcHJfbWFsZCAgID0gJSMwMTBseFxuIixyZWcpOwogCiAJLyogcmVhZCBzZHIgcmVnaXN0ZXIgKi8KIAltZnNkcihzZHJfZWJjLHJlZyk7Ci0JcHJpbnRmKCJzZHJfZWJjICAgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJzZHJfZWJjICAgID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZzZHIoc2RyX2NwNDQwLHJlZyk7Ci0JcHJpbnRmKCJzZHJfY3A0NDAgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJzZHJfY3A0NDAgID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZzZHIoc2RyX3hjcixyZWcpOwotCXByaW50Zigic2RyX3hjciAgICA9ICUjMDEweFxuIixyZWcpOworCXByaW50Zigic2RyX3hjciAgICA9ICUjMDEwbHhcbiIscmVnKTsKIAogCW1mc2RyKHNkcl94cGxsYyxyZWcpOwotCXByaW50Zigic2RyX3hwbGxjICA9ICUjMDEweFxuIixyZWcpOworCXByaW50Zigic2RyX3hwbGxjICA9ICUjMDEwbHhcbiIscmVnKTsKIAogCW1mc2RyKHNkcl94cGxsZCxyZWcpOwotCXByaW50Zigic2RyX3hwbGxkICA9ICUjMDEweFxuIixyZWcpOworCXByaW50Zigic2RyX3hwbGxkICA9ICUjMDEwbHhcbiIscmVnKTsKIAogCW1mc2RyKHNkcl9wZmMwLHJlZyk7Ci0JcHJpbnRmKCJzZHJfcGZjMCAgID0gJSMwMTB4XG4iLHJlZyk7CisJcHJpbnRmKCJzZHJfcGZjMCAgID0gJSMwMTBseFxuIixyZWcpOwogCiAJbWZzZHIoc2RyX3BmYzEscmVnKTsKLQlwcmludGYoInNkcl9wZmMxICAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoInNkcl9wZmMxICAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZnNkcihzZHJfY3VzdDAscmVnKTsKLQlwcmludGYoInNkcl9jdXN0MCAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoInNkcl9jdXN0MCAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZnNkcihzZHJfY3VzdDEscmVnKTsKLQlwcmludGYoInNkcl9jdXN0MSAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoInNkcl9jdXN0MSAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZnNkcihzZHJfdWFydDAscmVnKTsKLQlwcmludGYoInNkcl91YXJ0MCAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoInNkcl91YXJ0MCAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAltZnNkcihzZHJfdWFydDEscmVnKTsKLQlwcmludGYoInNkcl91YXJ0MSAgPSAlIzAxMHhcbiIscmVnKTsKKwlwcmludGYoInNkcl91YXJ0MSAgPSAlIzAxMGx4XG4iLHJlZyk7CiAKIAlwcmludGYoIj09PT09IERpc3BsYXkgcmVzZXQgYW5kIGluaXRpYWxpemUgcmVnaXN0ZXIgRW5kICAgPT09PT09PT09XG4iKTsKIH0KQEAgLTk3LDEzICs5NywxMyBAQAogCiAJcHJpbnRmKCJQQ0ktWCBjaGlwIGNvbnRyb2wgcmVnaXN0ZXJzXG4iKTsKIAltZnNkcihzZHJfeGNyLCByZWcpOwotCXByaW50Zigic2RyX3hjciAgICA9ICUjMDEweFxuIiwgcmVnKTsKKwlwcmludGYoInNkcl94Y3IgICAgPSAlIzAxMGx4XG4iLCByZWcpOwogCiAJbWZzZHIoc2RyX3hwbGxjLCByZWcpOwotCXByaW50Zigic2RyX3hwbGxjICA9ICUjMDEweFxuIiwgcmVnKTsKKwlwcmludGYoInNkcl94cGxsYyAgPSAlIzAxMGx4XG4iLCByZWcpOwogCiAJbWZzZHIoc2RyX3hwbGxkLCByZWcpOwotCXByaW50Zigic2RyX3hwbGxkICA9ICUjMDEweFxuIiwgcmVnKTsKKwlwcmludGYoInNkcl94cGxsZCAgPSAlIzAxMGx4XG4iLCByZWcpOwogCiAJcHJpbnRmKCJQQ0ktWCBCcmlkZ2UgQ29uZmlndXJlIHJlZ2lzdGVyc1xuIik7CiAJcHJpbnRmKCJQQ0lYMF9WRU5ESUQgICAgICAgICAgICA9ICUjMDZ4XG4iLCBpbjE2cihQQ0lYMF9WRU5ESUQpKTsKQEAgLTExNiw0OSArMTE2LDQ5IEBACiAJcHJpbnRmKCJQQ0lYMF9IRFRZUEUgICAgICAgICAgICA9ICUjMDR4XG4iLCBpbjgoUENJWDBfSERUWVBFKSk7CiAJcHJpbnRmKCJQQ0lYMF9CSVNUICAgICAgICAgICAgICA9ICUjMDR4XG4iLCBpbjgoUENJWDBfQklTVCkpOwogCi0JcHJpbnRmKCJQQ0lYMF9CQVIwICAgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfQkFSMCkpOwotCXByaW50ZigiUENJWDBfQkFSMSAgICAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX0JBUjEpKTsKLQlwcmludGYoIlBDSVgwX0JBUjIgICAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9CQVIyKSk7Ci0JcHJpbnRmKCJQQ0lYMF9CQVIzICAgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfQkFSMykpOwotCXByaW50ZigiUENJWDBfQkFSNCAgICAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX0JBUjQpKTsKLQlwcmludGYoIlBDSVgwX0JBUjUgICAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9CQVI1KSk7CisJcHJpbnRmKCJQQ0lYMF9CQVIwICAgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX0JBUjApKTsKKwlwcmludGYoIlBDSVgwX0JBUjEgICAgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfQkFSMSkpOworCXByaW50ZigiUENJWDBfQkFSMiAgICAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9CQVIyKSk7CisJcHJpbnRmKCJQQ0lYMF9CQVIzICAgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX0JBUjMpKTsKKwlwcmludGYoIlBDSVgwX0JBUjQgICAgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfQkFSNCkpOworCXByaW50ZigiUENJWDBfQkFSNSAgICAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9CQVI1KSk7CiAKLQlwcmludGYoIlBDSVgwX0NJU1BUUiAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9DSVNQVFIpKTsKKwlwcmludGYoIlBDSVgwX0NJU1BUUiAgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfQ0lTUFRSKSk7CiAJcHJpbnRmKCJQQ0lYMF9TQlNTWVNWSUQgICAgICAgICA9ICUjMDEweFxuIiwgaW4xNnIoUENJWDBfU0JTWVNWSUQpKTsKIAlwcmludGYoIlBDSVgwX1NCU1NZU0lEICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjE2cihQQ0lYMF9TQlNZU0lEKSk7Ci0JcHJpbnRmKCJQQ0lYMF9FUk9NQkEgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfRVJPTUJBKSk7CisJcHJpbnRmKCJQQ0lYMF9FUk9NQkEgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX0VST01CQSkpOwogCXByaW50ZigiUENJWDBfQ0FQICAgICAgICAgICAgICAgPSAlIzA0eFxuIiwgaW44KFBDSVgwX0NBUCkpOwogCXByaW50ZigiUENJWDBfSU5UTE4gICAgICAgICAgICAgPSAlIzA0eFxuIiwgaW44KFBDSVgwX0lOVExOKSk7CiAJcHJpbnRmKCJQQ0lYMF9JTlRQTiAgICAgICAgICAgICA9ICUjMDR4XG4iLCBpbjgoUENJWDBfSU5UUE4pKTsKIAlwcmludGYoIlBDSVgwX01JTkdOVCAgICAgICAgICAgID0gJSMwNHhcbiIsIGluOChQQ0lYMF9NSU5HTlQpKTsKIAlwcmludGYoIlBDSVgwX01BWExUTkNZICAgICAgICAgID0gJSMwNHhcbiIsIGluOChQQ0lYMF9NQVhMVE5DWSkpOwogCi0JcHJpbnRmKCJQQ0lYMF9CUkRHT1BUMSAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfQlJER09QVDEpKTsKLQlwcmludGYoIlBDSVgwX0JSREdPUFQyICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9CUkRHT1BUMikpOworCXByaW50ZigiUENJWDBfQlJER09QVDEgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9CUkRHT1BUMSkpOworCXByaW50ZigiUENJWDBfQlJER09QVDIgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9CUkRHT1BUMikpOwogCi0JcHJpbnRmKCJQQ0lYMF9QT00wTEFMICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUE9NMExBTCkpOwotCXByaW50ZigiUENJWDBfUE9NMExBSCAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BPTTBMQUgpKTsKLQlwcmludGYoIlBDSVgwX1BPTTBTQSAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QT00wU0EpKTsKLQlwcmludGYoIlBDSVgwX1BPTTBQQ0lMQUwgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QT00wUENJQUwpKTsKLQlwcmludGYoIlBDSVgwX1BPTTBQQ0lMQUggICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QT00wUENJQUgpKTsKLQlwcmludGYoIlBDSVgwX1BPTTFMQUwgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QT00xTEFMKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QT00xTEFIICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUE9NMUxBSCkpOwotCXByaW50ZigiUENJWDBfUE9NMVNBICAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BPTTFTQSkpOwotCXByaW50ZigiUENJWDBfUE9NMVBDSUxBTCAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BPTTFQQ0lBTCkpOwotCXByaW50ZigiUENJWDBfUE9NMVBDSUxBSCAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BPTTFQQ0lBSCkpOwotCXByaW50ZigiUENJWDBfUE9NMlNBICAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BPTTJTQSkpOworCXByaW50ZigiUENJWDBfUE9NMExBTCAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QT00wTEFMKSk7CisJcHJpbnRmKCJQQ0lYMF9QT00wTEFIICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BPTTBMQUgpKTsKKwlwcmludGYoIlBDSVgwX1BPTTBTQSAgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUE9NMFNBKSk7CisJcHJpbnRmKCJQQ0lYMF9QT00wUENJTEFMICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BPTTBQQ0lBTCkpOworCXByaW50ZigiUENJWDBfUE9NMFBDSUxBSCAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QT00wUENJQUgpKTsKKwlwcmludGYoIlBDSVgwX1BPTTFMQUwgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUE9NMUxBTCkpOworCXByaW50ZigiUENJWDBfUE9NMUxBSCAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QT00xTEFIKSk7CisJcHJpbnRmKCJQQ0lYMF9QT00xU0EgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BPTTFTQSkpOworCXByaW50ZigiUENJWDBfUE9NMVBDSUxBTCAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QT00xUENJQUwpKTsKKwlwcmludGYoIlBDSVgwX1BPTTFQQ0lMQUggICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUE9NMVBDSUFIKSk7CisJcHJpbnRmKCJQQ0lYMF9QT00yU0EgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BPTTJTQSkpOwogCi0JcHJpbnRmKCJQQ0lYMF9QSU0wU0EgICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUElNMFNBKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QSU0wTEFMICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUElNMExBTCkpOwotCXByaW50ZigiUENJWDBfUElNMExBSCAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BJTTBMQUgpKTsKLQlwcmludGYoIlBDSVgwX1BJTTFTQSAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QSU0xU0EpKTsKLQlwcmludGYoIlBDSVgwX1BJTTFMQUwgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QSU0xTEFMKSk7Ci0JcHJpbnRmKCJQQ0lYMF9QSU0xTEFIICAgICAgICAgICA9ICUjMDEweFxuIiwgaW4zMnIoUENJWDBfUElNMUxBSCkpOwotCXByaW50ZigiUENJWDBfUElNMlNBICAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BJTTFTQSkpOwotCXByaW50ZigiUENJWDBfUElNMkxBTCAgICAgICAgICAgPSAlIzAxMHhcbiIsIGluMzJyKFBDSVgwX1BJTTFMQUwpKTsKLQlwcmludGYoIlBDSVgwX1BJTTJMQUggICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9QSU0xTEFIKSk7CisJcHJpbnRmKCJQQ0lYMF9QSU0wU0EgICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BJTTBTQSkpOworCXByaW50ZigiUENJWDBfUElNMExBTCAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QSU0wTEFMKSk7CisJcHJpbnRmKCJQQ0lYMF9QSU0wTEFIICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BJTTBMQUgpKTsKKwlwcmludGYoIlBDSVgwX1BJTTFTQSAgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUElNMVNBKSk7CisJcHJpbnRmKCJQQ0lYMF9QSU0xTEFMICAgICAgICAgICA9ICUjMDEwbHhcbiIsIGluMzJyKFBDSVgwX1BJTTFMQUwpKTsKKwlwcmludGYoIlBDSVgwX1BJTTFMQUggICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUElNMUxBSCkpOworCXByaW50ZigiUENJWDBfUElNMlNBICAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QSU0xU0EpKTsKKwlwcmludGYoIlBDSVgwX1BJTTJMQUwgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfUElNMUxBTCkpOworCXByaW50ZigiUENJWDBfUElNMkxBSCAgICAgICAgICAgPSAlIzAxMGx4XG4iLCBpbjMycihQQ0lYMF9QSU0xTEFIKSk7CiAKLQlwcmludGYoIlBDSVgwX1hTVFMgICAgICAgICAgICAgID0gJSMwMTB4XG4iLCBpbjMycihQQ0lYMF9TVFMpKTsKKwlwcmludGYoIlBDSVgwX1hTVFMgICAgICAgICAgICAgID0gJSMwMTBseFxuIiwgaW4zMnIoUENJWDBfU1RTKSk7CiB9CiAKIGludCBkb19zaG93X3hicmlkZ2VfaW5mbyhjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3lvc2VtaXRlL3lvc2VtaXRlLmMgYi9ib2FyZC9hbWNjL3lvc2VtaXRlL3lvc2VtaXRlLmMKaW5kZXggM2IxZjhlMi4uMDViZTQwYSAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy95b3NlbWl0ZS95b3NlbWl0ZS5jCisrKyBiL2JvYXJkL2FtY2MveW9zZW1pdGUveW9zZW1pdGUuYwpAQCAtNTEwLDI0ICs1MTAsMyBAQAogCS8qIGdpdmUgcmVzZXQgdG8gQkNTUiAqLwogCSoodW5zaWduZWQgY2hhciAqKShDRkdfQkNTUl9CQVNFIHwgMHgwNikgPSAweDA5OwogfQotCi0jaWYgZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKLXZvaWQgZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCi17Ci0JdTMyIHZhbFs0XTsKLQlpbnQgcmM7Ci0KLQlmdF9jcHVfc2V0dXAoYmxvYiwgYmQpOwotCi0JLyogRml4dXAgTk9SIG1hcHBpbmcgKi8KLQl2YWxbMF0gPSAwOwkJCQkvKiBjaGlwIHNlbGVjdCBudW1iZXIgKi8KLQl2YWxbMV0gPSAwOwkJCQkvKiBhbHdheXMgMCAqLwotCXZhbFsyXSA9IGdkLT5iZC0+YmlfZmxhc2hzdGFydDsKLQl2YWxbM10gPSBnZC0+YmQtPmJpX2ZsYXNoc2l6ZTsKLQlyYyA9IGZkdF9maW5kX2FuZF9zZXRwcm9wKGJsb2IsICIvcGxiL29wYi9lYmMiLCAicmFuZ2VzIiwKLQkJCQkgIHZhbCwgc2l6ZW9mKHZhbCksIDEpOwotCWlmIChyYykKLQkJcHJpbnRmKCJVbmFibGUgdG8gdXBkYXRlIHByb3BlcnR5IE5PUiBtYXBwaW5nLCBlcnI9JXNcbiIsCi0JCSAgICAgICBmZHRfc3RyZXJyb3IocmMpKTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvYXJtYWRpbGxvL2ZsYXNoLmMgYi9ib2FyZC9hcm1hZGlsbG8vZmxhc2guYwppbmRleCAwMzdhNjQzLi44NTE4ODU2IDEwMDY0NAotLS0gYS9ib2FyZC9hcm1hZGlsbG8vZmxhc2guYworKysgYi9ib2FyZC9hcm1hZGlsbG8vZmxhc2guYwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJaW50IGksIHJjOwogCiAJd3AgPSAoYWRkciAmIH4xKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0JcHJpbnRmICgiV3JpdGluZyAlZCBzaG9ydCBkYXRhIHRvIDB4JXAgZnJvbSAweCVwLlxuICIsIGNudCwgd3AsIHNyYyk7CisJcHJpbnRmICgiV3JpdGluZyAlbHUgc2hvcnQgZGF0YSB0byAweCVseCBmcm9tIDB4JXAuXG4gIiwgY250LCB3cCwgc3JjKTsKIAogCS8qCiAJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcwpkaWZmIC0tZ2l0IGEvYm9hcmQvYXRtZWwvYXQ5MXNhbTkyNjBlay9hdDkxc2FtOTI2MGVrLmMgYi9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2MGVrL2F0OTFzYW05MjYwZWsuYwppbmRleCA4MzZhMGM0Li4wNmQ4NTEyIDEwMDY0NAotLS0gYS9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2MGVrL2F0OTFzYW05MjYwZWsuYworKysgYi9ib2FyZC9hdG1lbC9hdDkxc2FtOTI2MGVrL2F0OTFzYW05MjYwZWsuYwpAQCAtMTg4LDggKzE4OCwxNyBAQAogCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDApOwkvKiBFUlgyICovCiAJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyNiwgMCk7CS8qIEVSWDMgKi8KIAlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJLyogRVJYQ0sgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOTI2MEVLKQorCS8qCisJICogdXNlIFBBMTAsIFBBMTEgZm9yIEVUWDIsIEVUWDMuCisJICogUEEyMyBhbmQgUEEyNCBhcmUgZm9yIFRXSSBFRVBST00KKwkgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAwKTsJLyogRVRYMiAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDApOwkvKiBFVFgzICovCisjZWxzZQogCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDApOwkvKiBFVFgyICovCiAJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMCk7CS8qIEVUWDMgKi8KKyNlbmRpZgogCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjIsIDApOwkvKiBFVFhFUiAqLwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2F0dW04NTQ4L2F0dW04NTQ4LmMgYi9ib2FyZC9hdHVtODU0OC9hdHVtODU0OC5jCmluZGV4IDRkOGM2ZmIuLjM0ZjQ1OTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2F0dW04NTQ4L2F0dW04NTQ4LmMKKysrIGIvYm9hcmQvYXR1bTg1NDgvYXR1bTg1NDguYwpAQCAtNTMsNyArNTMsNyBAQAogCXZvbGF0aWxlIGNjc3JfbG9jYWxfZWNtX3QgKmVjbSA9ICh2b2lkICopKENGR19NUEM4NXh4X0VDTV9BRERSKTsKIAogCWlmICgodWludCkmZ3VyLT5wb3JwbGxzciAhPSAweGUwMGUwMDAwKSB7Ci0JCXByaW50ZigiaW1tYXAgc2l6ZSBlcnJvciAleFxuIiwmZ3VyLT5wb3JwbGxzcik7CisJCXByaW50ZigiaW1tYXAgc2l6ZSBlcnJvciAlbHhcbiIsKHVsb25nKSZndXItPnBvcnBsbHNyKTsKIAl9CiAJcHJpbnRmICgiQm9hcmQ6IEFUVU04NTQ4XG4iKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvYmMzNDUwL2NtZF9iYzM0NTAuYyBiL2JvYXJkL2JjMzQ1MC9jbWRfYmMzNDUwLmMKaW5kZXggZjdmMDAxMy4uNDhiYzY1ZCAxMDA2NDQKLS0tIGEvYm9hcmQvYmMzNDUwL2NtZF9iYzM0NTAuYworKysgYi9ib2FyZC9iYzM0NTAvY21kX2JjMzQ1MC5jCkBAIC0xODksNyArMTg5LDcgQEAKIAlpZiAocmMgPiAweDBGKQogCQlyZXR1cm4gLTE7CiAKLQlwcmludGYgKCIweCV4XG4iLCByYyk7CisJcHJpbnRmICgiMHglbHhcbiIsIHJjKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvY201MjAwL2NtZF9jbTUyMDAuYyBiL2JvYXJkL2NtNTIwMC9jbWRfY201MjAwLmMKaW5kZXggMzU0ZjJiZi4uMjIwMWJkZCAxMDA2NDQKLS0tIGEvYm9hcmQvY201MjAwL2NtZF9jbTUyMDAuYworKysgYi9ib2FyZC9jbTUyMDAvY21kX2NtNTIwMC5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAkJaWYgKCgoKih2dV9sb25nICopTVBDNVhYWF9XVV9HUElPX0RBVEFfSSkgJiAweDEwMDAwMDAwKSAhPQogCQkJCTB4MTAwMDAwMDApIHsKIAkJCWVycm9yX3N0YXR1cyA9IDI7Ci0JCQlwcmludGYoIiVzOiBmYWlsdXJlIGF0IHJzMjMyXzQsIHJ4ZCBzdGF0dXMgaXMgJWQgIgorCQkJcHJpbnRmKCIlczogZmFpbHVyZSBhdCByczIzMl80LCByeGQgc3RhdHVzIGlzICVsdSAiCiAJCQkJIihzaG91bGQgYmUgMSlcbiIsIF9fRlVOQ1RJT05fXywKIAkJCQkoKCoodnVfbG9uZyAqKU1QQzVYWFhfV1VfR1BJT19EQVRBX0kpICYKIAkJCQkJMHgxMDAwMDAwMCkgPj4gMjgpOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJCWlmICgoKCoodnVfbG9uZyAqKU1QQzVYWFhfV1VfR1BJT19EQVRBX0kpICYgMHgxMDAwMDAwMCkgIT0KIAkJCQkweDAwMDAwMDAwKSB7CiAJCQllcnJvcl9zdGF0dXMgPSAyOwotCQkJcHJpbnRmKCIlczogZmFpbHVyZSBhdCByczIzMl80LCByeGQgc3RhdHVzIGlzICVkICIKKwkJCXByaW50ZigiJXM6IGZhaWx1cmUgYXQgcnMyMzJfNCwgcnhkIHN0YXR1cyBpcyAlbHUgIgogCQkJCSIoc2hvdWxkIGJlIDApXG4iLCBfX0ZVTkNUSU9OX18sCiAJCQkJKCgqKHZ1X2xvbmcgKilNUEM1WFhYX1dVX0dQSU9fREFUQV9JKSAmCiAJCQkJCTB4MTAwMDAwMDApID4+IDI4KTsKQEAgLTM2Niw3ICszNjYsNyBAQAogCQlpZiAoKCgqKHZ1X2xvbmcgKilNUEM1WFhYX1dVX0dQSU9fREFUQV9JKSAmIDB4MjAwMDAwMDApICE9CiAJCQkJMHgyMDAwMDAwMCkgewogCQkJZXJyb3Jfc3RhdHVzID0gMzsKLQkJCXByaW50ZigiJXM6IGZhaWx1cmUgYXQgcnMyMzJfNCwgY3RzIHN0YXR1cyBpcyAlZCAiCisJCQlwcmludGYoIiVzOiBmYWlsdXJlIGF0IHJzMjMyXzQsIGN0cyBzdGF0dXMgaXMgJWx1ICIKIAkJCQkiKHNob3VsZCBiZSAxKVxuIiwgX19GVU5DVElPTl9fLAogCQkJCSgoKih2dV9sb25nICopTVBDNVhYWF9XVV9HUElPX0RBVEFfSSkgJgogCQkJCQkweDIwMDAwMDAwKSA+PiAyOSk7CkBAIC0zODEsNyArMzgxLDcgQEAKIAkJaWYgKCgoKih2dV9sb25nICopTVBDNVhYWF9XVV9HUElPX0RBVEFfSSkgJiAweDIwMDAwMDAwKSAhPQogCQkJCTB4MDAwMDAwMDApIHsKIAkJCWVycm9yX3N0YXR1cyA9IDM7Ci0JCQlwcmludGYoIiVzOiBmYWlsdXJlIGF0IHJzMjMyXzQsIGN0cyBzdGF0dXMgaXMgJWQgIgorCQkJcHJpbnRmKCIlczogZmFpbHVyZSBhdCByczIzMl80LCBjdHMgc3RhdHVzIGlzICVsdSAiCiAJCQkJIihzaG91bGQgYmUgMClcbiIsIF9fRlVOQ1RJT05fXywKIAkJCQkoKCoodnVfbG9uZyAqKU1QQzVYWFhfV1VfR1BJT19EQVRBX0kpICYKIAkJCQkJMHgyMDAwMDAwMCkgPj4gMjkpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvY201MjAwL2Z3dXBkYXRlLmMgYi9ib2FyZC9jbTUyMDAvZnd1cGRhdGUuYwppbmRleCAxOWFhOTRhLi41YTI3MTkxIDEwMDY0NAotLS0gYS9ib2FyZC9jbTUyMDAvZnd1cGRhdGUuYworKysgYi9ib2FyZC9jbTUyMDAvZnd1cGRhdGUuYwpAQCAtNjMsNyArNjMsNyBAQAogCWlmICghYmNtZCkKIAkJcmV0dXJuOwogCi0Jc3ByaW50ZihrYSwgIiVseCIsIExPQURfQUREUik7CisJc3ByaW50ZihrYSwgIiVseCIsICh1bG9uZylMT0FEX0FERFIpOwogCiAJLyogcHJlcGFyZSBvdXIgYm9vdGFyZ3MgKi8KIAlyc2FyZ3MgPSBnZXRlbnYoInJzLWFyZ3MiKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2NvYnJhNTI3Mi9taWkuYyBiL2JvYXJkL2NvYnJhNTI3Mi9taWkuYwppbmRleCBkMGE0YTM5Li5iMzBiYTgwIDEwMDY0NAotLS0gYS9ib2FyZC9jb2JyYTUyNzIvbWlpLmMKKysrIGIvYm9hcmQvY29icmE1MjcyL21paS5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIH0KICNlbmRpZgkJCQkvKiBDRkdfRElTQ09WRVJfUEhZICovCiAKLWludCBtaWlfaW5pdCh2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJfX21paV9pbml0IikpKTsKK3ZvaWQgbWlpX2luaXQodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygiX19taWlfaW5pdCIpKSk7CiAKIHZvaWQgX19taWlfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vZHZfYm9hcmQuYyBiL2JvYXJkL2RhdmluY2kvZHYtZXZtL2R2X2JvYXJkLmMKaW5kZXggODhiMWU1Ny4uODM0ZWI2OCAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vZHZfYm9hcmQuYworKysgYi9ib2FyZC9kYXZpbmNpL2R2LWV2bS9kdl9ib2FyZC5jCkBAIC0yOSwxNCArMjksMTAgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2VtYWNfZGVmcy5oPgogCi0jZGVmaW5lIE1BQ0hfVFlQRV9EQVZJTkNJX0VWTQkJOTAxCi0KIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCi1leHRlcm4gdm9pZAlpMmNfaW5pdChpbnQgc3BlZWQsIGludCBzbGF2ZWFkZHIpOwogZXh0ZXJuIHZvaWQJdGltZXJfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQJZXRoX2h3X2luaXQodm9pZCk7Ci1leHRlcm4gcGh5X3QJcGh5OwogCiAKIC8qIFdvcmtzIG9uIEFsd2F5cyBPbiBwb3dlciBkb21haW4gb25seSAobm8gUEQgYXJndW1lbnQpICovCkBAIC0xODcsMTEgKzE4Myw4IEBACiAJCX0KIAl9CiAKLQlpZiAoIWV0aF9od19pbml0KCkpIHsKKwlpZiAoIWV0aF9od19pbml0KCkpCiAJCXByaW50ZigiZXRoZXJuZXQgaW5pdCBmYWlsZWQhXG4iKTsKLQl9IGVsc2UgewotCQlwcmludGYoIkVUSCBQSFkgICA6ICVzXG4iLCBwaHkubmFtZSk7Ci0JfQogCiAJaTJjX3JlYWQgKDB4MzksIDB4MDAsIDEsICh1X2ludDhfdCAqKSZpLCAxKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9zY2htb29naWUvZHZfYm9hcmQuYyBiL2JvYXJkL2RhdmluY2kvc2NobW9vZ2llL2R2X2JvYXJkLmMKaW5kZXggMTNkMjE5NS4uMzAxNzU0NiAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9zY2htb29naWUvZHZfYm9hcmQuYworKysgYi9ib2FyZC9kYXZpbmNpL3NjaG1vb2dpZS9kdl9ib2FyZC5jCkBAIC0yOSwxNCArMjksMTAgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2VtYWNfZGVmcy5oPgogCi0jZGVmaW5lIE1BQ0hfVFlQRV9TQ0hNT09HSUUJCTEyNTUKLQogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLWV4dGVybiB2b2lkCWkyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkcik7CiBleHRlcm4gdm9pZAl0aW1lcl9pbml0KHZvaWQpOwogZXh0ZXJuIGludAlldGhfaHdfaW5pdCh2b2lkKTsKLWV4dGVybiBwaHlfdAlwaHk7CiAKIAogLyogV29ya3Mgb24gQWx3YXlzIE9uIHBvd2VyIGRvbWFpbiBvbmx5IChubyBQRCBhcmd1bWVudCkgKi8KQEAgLTIzMywxMSArMjI5LDggQEAKIAkJZm9yY2VlbnYoInNlcmlhbCMiLCAoY2hhciAqKSZ0bXBbMF0pOwogCX0KIAotCWlmICghZXRoX2h3X2luaXQoKSkgeworCWlmICghZXRoX2h3X2luaXQoKSkKIAkJcHJpbnRmKCJldGhlcm5ldCBpbml0IGZhaWxlZCFcbiIpOwotCX0gZWxzZSB7Ci0JCXByaW50ZigiRVRIIFBIWSAgIDogJXNcbiIsIHBoeS5uYW1lKTsKLQl9CiAKIAlyZXR1cm4oMCk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL3NmZnNkci9zZmZzZHIuYyBiL2JvYXJkL2RhdmluY2kvc2Zmc2RyL3NmZnNkci5jCmluZGV4IGI3MzQ4NGEuLmY0MTA4MWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RhdmluY2kvc2Zmc2RyL3NmZnNkci5jCisrKyBiL2JvYXJkL2RhdmluY2kvc2Zmc2RyL3NmZnNkci5jCkBAIC00Myw3ICs0Myw2IEBACiAKIGV4dGVybiB2b2lkIHRpbWVyX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGV0aF9od19pbml0KHZvaWQpOwotZXh0ZXJuIHBoeV90IHBoeTsKIAogCiAvKiBXb3JrcyBvbiBBbHdheXMgT24gcG93ZXIgZG9tYWluIG9ubHkgKG5vIFBEIGFyZ3VtZW50KSAqLwpAQCAtMjg4LDExICsyODcsOCBAQAogCQl9CiAJfQogCi0JaWYgKCFldGhfaHdfaW5pdCgpKSB7CisJaWYgKCFldGhfaHdfaW5pdCgpKQogCQlwcmludGYoIkV0aGVybmV0IGluaXQgZmFpbGVkXG4iKTsKLQl9IGVsc2UgewotCQlwcmludGYoIkVUSCBQSFk6ICVzXG4iLCBwaHkubmFtZSk7Ci0JfQogCiAJLyogT24gdGhpcyBwbGF0Zm9ybSwgVS1Cb290IGlzIGNvcGllZCBpbiBSQU0gYnkgdGhlIFVCTCwKIAkgKiBzbyB3ZSBhcmUgYWx3YXlzIGluIHRoZSByZWxvY2F0ZWQgc3RhdGUuICovCmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL3NvbmF0YS9kdl9ib2FyZC5jIGIvYm9hcmQvZGF2aW5jaS9zb25hdGEvZHZfYm9hcmQuYwppbmRleCBlODY2NWU1Li5hNmY5YmM3IDEwMDY0NAotLS0gYS9ib2FyZC9kYXZpbmNpL3NvbmF0YS9kdl9ib2FyZC5jCisrKyBiL2JvYXJkL2RhdmluY2kvc29uYXRhL2R2X2JvYXJkLmMKQEAgLTI5LDE0ICsyOSwxMCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZW1hY19kZWZzLmg+CiAKLSNkZWZpbmUgTUFDSF9UWVBFX1NPTkFUQQkJMTI1NAotCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAotZXh0ZXJuIHZvaWQJaTJjX2luaXQoaW50IHNwZWVkLCBpbnQgc2xhdmVhZGRyKTsKIGV4dGVybiB2b2lkCXRpbWVyX2luaXQodm9pZCk7CiBleHRlcm4gaW50CWV0aF9od19pbml0KHZvaWQpOwotZXh0ZXJuIHBoeV90CXBoeTsKIAogCiAvKiBXb3JrcyBvbiBBbHdheXMgT24gcG93ZXIgZG9tYWluIG9ubHkgKG5vIFBEIGFyZ3VtZW50KSAqLwpAQCAtMTg4LDExICsxODQsOCBAQAogCQl9CiAJfQogCi0JaWYgKCFldGhfaHdfaW5pdCgpKSB7CisJaWYgKCFldGhfaHdfaW5pdCgpKQogCQlwcmludGYoImV0aGVybmV0IGluaXQgZmFpbGVkIVxuIik7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmKCJFVEggUEhZICAgOiAlc1xuIiwgcGh5Lm5hbWUpOwotCX0KIAogCXJldHVybigwKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2RlbHRhL25hbmQuYyBiL2JvYXJkL2RlbHRhL25hbmQuYwppbmRleCBhNjM1YTY1Li41MDI0MDU2IDEwMDY0NAotLS0gYS9ib2FyZC9kZWx0YS9uYW5kLmMKKysrIGIvYm9hcmQvZGVsdGEvbmFuZC5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmKGdldF9kZWx0YShzdGFydCkgPiB0aW1lb3V0KSB7Ci0JCQlERkNfREVCVUcxKCJkZmNfd2FpdF9ldmVudDogVElNRU9VVCB3YWl0aW5nIGZvciBldmVudDogMHgleC5cbiIsIGV2ZW50KTsKKwkJCURGQ19ERUJVRzEoImRmY193YWl0X2V2ZW50OiBUSU1FT1VUIHdhaXRpbmcgZm9yIGV2ZW50OiAweCVseC5cbiIsIGV2ZW50KTsKIAkJCXJldHVybiAweGZmMDAwMDAwOwogCQl9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2VscHBjL2VlcHJvMTAwX3Nyb20uYyBiL2JvYXJkL2VsdGVjL2VscHBjL2VlcHJvMTAwX3Nyb20uYwppbmRleCBmMDIxYzUwLi40YTlkYTU0IDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9lbHBwYy9lZXBybzEwMF9zcm9tLmMKKysrIGIvYm9hcmQvZWx0ZWMvZWxwcGMvZWVwcm8xMDBfc3JvbS5jCkBAIC0zMSw4MiArMzEsODMgQEAKICNpbmNsdWRlIDxuZXQuaD4KICNpbmNsdWRlICJzcm9tLmgiCiAKLWV4dGVybiBpbnQgZWVwcm8xMDBfd3JpdGVfZWVwcm9tIChzdHJ1Y3QgZXRoX2RldmljZSogZGV2LAotCQkgICAgaW50IGxvY2F0aW9uLCBpbnQgYWRkcl9sZW4sIHVuc2lnbmVkIHNob3J0IGRhdGEpOworZXh0ZXJuIGludCBlZXBybzEwMF93cml0ZV9lZXByb20gKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsCisJCQkJICBpbnQgbG9jYXRpb24sIGludCBhZGRyX2xlbiwKKwkJCQkgIHVuc2lnbmVkIHNob3J0IGRhdGEpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiB1bnNpZ25lZCBzaG9ydCBlZXBybzEwMF9zcm9tX2NoZWNrc3VtICh1bnNpZ25lZCBzaG9ydCAqc3JvbWRhdGEpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQgc3VtID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCBzdW0gPSAwOworCXVuc2lnbmVkIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IChFRV9TSVpFLTEpOyBpKyspCi0gICAgewotCXN1bSArPSBzcm9tZGF0YVtpXTsKLSAgICB9Ci0gICAgcmV0dXJuIChFRV9DSEVDS1NVTSAtIHN1bSk7CisJZm9yIChpID0gMDsgaSA8IChFRV9TSVpFIC0gMSk7IGkrKykgeworCQlzdW0gKz0gc3JvbWRhdGFbaV07CisJfQorCXJldHVybiAoRUVfQ0hFQ0tTVU0gLSBzdW0pOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBpbnQgZWVwcm8xMDBfc3JvbV9zdG9yZSAodW5zaWduZWQgc2hvcnQgKnNvdXJjZSkKIHsKLSAgICBpbnQgY291bnQ7Ci0gICAgc3RydWN0IGV0aF9kZXZpY2Ugb25ib2FyZF9kZXY7CisJaW50IGNvdW50OworCXN0cnVjdCBldGhfZGV2aWNlIG9uYm9hcmRfZGV2OwogCi0gICAgLyogZ2V0IG9uYm9hcmQgbmV0d29yayBpb2Jhc2UgKi8KLSAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoUENJX0JERigwLDB4MTAsMCksIFBDSV9CQVNFX0FERFJFU1NfMCwKLQkJICh1bnNpZ25lZCBpbnQgKikmb25ib2FyZF9kZXYuaW9iYXNlKTsKLSAgICBvbmJvYXJkX2Rldi5pb2Jhc2UgJj0gfjB4ZjsKKwkvKiBnZXQgb25ib2FyZCBuZXR3b3JrIGlvYmFzZSAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAoUENJX0JERiAoMCwgMHgxMCwgMCksIFBDSV9CQVNFX0FERFJFU1NfMCwKKwkJCSAgICAgICAodW5zaWduZWQgaW50ICopICZvbmJvYXJkX2Rldi5pb2Jhc2UpOworCW9uYm9hcmRfZGV2LmlvYmFzZSAmPSB+MHhmOwogCi0gICAgc291cmNlWzYzXSA9IGVlcHJvMTAwX3Nyb21fY2hlY2tzdW0gKHNvdXJjZSk7CisJc291cmNlWzYzXSA9IGVlcHJvMTAwX3Nyb21fY2hlY2tzdW0gKHNvdXJjZSk7CiAKLSAgICBmb3IgKGNvdW50PTA7IGNvdW50IDwgRUVfU0laRTsgY291bnQrKykKLSAgICB7Ci0gICAgaWYgKCBlZXBybzEwMF93cml0ZV9lZXByb20gKChzdHJ1Y3QgZXRoX2RldmljZSopJm9uYm9hcmRfZGV2LAotCSAgICAgY291bnQsIEVFX0FERFJfQklUUywgU1JPTV9TSE9SVChzb3VyY2UpKSA9PSAtMSApCi0JcmV0dXJuIC0xOwotICAgIHNvdXJjZSsrOwotICAgIH0KLSAgICByZXR1cm4gMDsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBFRV9TSVpFOyBjb3VudCsrKSB7CisJCWlmIChlZXBybzEwMF93cml0ZV9lZXByb20gKChzdHJ1Y3QgZXRoX2RldmljZSAqKSAmb25ib2FyZF9kZXYsCisJCQkJCSAgIGNvdW50LCBFRV9BRERSX0JJVFMsCisJCQkJCSAgIFNST01fU0hPUlQgKHNvdXJjZSkpID09IC0xKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc291cmNlKys7CisJfQorCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjaWZkZWYgRUVQUk8xMDBfU1JPTV9DSEVDSwogCi1leHRlcm4gaW50IHJlYWRfZWVwcm9tIChzdHJ1Y3QgZXRoX2RldmljZSogZGV2LCBpbnQgbG9jYXRpb24sIGludCBhZGRyX2xlbik7CitleHRlcm4gaW50IHJlYWRfZWVwcm9tIChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LCBpbnQgbG9jYXRpb24sIGludCBhZGRyX2xlbik7CiAKIHZvaWQgZWVwcm8xMDBfc3JvbV9sb2FkICh1bnNpZ25lZCBzaG9ydCAqZGVzdGluYXRpb24pCiB7Ci0gICAgaW50IGNvdW50OwotICAgIHN0cnVjdCBldGhfZGV2aWNlIG9uYm9hcmRfZGV2OworCWludCBjb3VudDsKKwlzdHJ1Y3QgZXRoX2RldmljZSBvbmJvYXJkX2RldjsKKwogI2lmZGVmIERFQlVHCi0gICAgaW50IGxyID0gMDsKLSAgICBwcmludGYgKCJlZXBybzEwMF9zcm9tX2Rvd25sb2FkOlxuIik7CisJaW50IGxyID0gMDsKKworCXByaW50ZiAoImVlcHJvMTAwX3Nyb21fZG93bmxvYWQ6XG4iKTsKICNlbmRpZgogCi0gICAgLyogZ2V0IG9uYm9hcmQgbmV0d29yayBpb2Jhc2UgKi8KLSAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoUENJX0JERigwLDB4MTAsMCksIFBDSV9CQVNFX0FERFJFU1NfMCwKLQkJICZvbmJvYXJkX2Rldi5pb2Jhc2UpOwotICAgIG9uYm9hcmRfZGV2LmlvYmFzZSAmPSB+MHhmOworCS8qIGdldCBvbmJvYXJkIG5ldHdvcmsgaW9iYXNlICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChQQ0lfQkRGICgwLCAweDEwLCAwKSwgUENJX0JBU0VfQUREUkVTU18wLAorCQkJICAgICAgICZvbmJvYXJkX2Rldi5pb2Jhc2UpOworCW9uYm9hcmRfZGV2LmlvYmFzZSAmPSB+MHhmOwogCi0gICAgbWVtc2V0IChkZXN0aW5hdGlvbiwgMHg2NSwgMTI4KTsKKwltZW1zZXQgKGRlc3RpbmF0aW9uLCAweDY1LCAxMjgpOwogCi0gICAgZm9yIChjb3VudD0wOyBjb3VudCA8IDB4NDA7IGNvdW50KyspCi0gICAgewotCSpkZXN0aW5hdGlvbisrID0gcmVhZF9lZXByb20gKHN0cnVjdCBldGhfZGV2aWNlKikmb25ib2FyZF9kZXYsCi0JCSBjb3VudCwgRUVfQUREUl9CSVRTKTsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAweDQwOyBjb3VudCsrKSB7CisJCSpkZXN0aW5hdGlvbisrID0gcmVhZF9lZXByb20gKChzdHJ1Y3QgZXRoX2RldmljZSAqKSAmb25ib2FyZF9kZXYsCisJCQkJCSAgICAgIGNvdW50LCBFRV9BRERSX0JJVFMpOwogI2lmZGVmIERFQlVHCi0JcHJpbnRmICgiJTA0eCAiLCAqKGRlc3RpbmF0aW9uIC0gMSkpOwotCWlmIChscisrID09IDcpCi0JewotCSAgICBwcmludGYoIlxuIik7Ci0JICAgIGxyID0gMDsKKwkJcHJpbnRmICgiJTA0eCAiLCAqKGRlc3RpbmF0aW9uIC0gMSkpOworCQlpZiAobHIrKyA9PSA3KSB7CisJCQlwcmludGYgKCJcbiIpOworCQkJbHIgPSAwOworCQl9CisjZW5kaWYKIAl9Ci0jZW5kaWYKLSAgICB9CiB9CiAjZW5kaWYgLyogRUVQUk8xMDBfU1JPTV9DSEVDSyAqLwogCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaTc1MC9zZHJhbV9pbml0LmMgYi9ib2FyZC9lc2QvY3BjaTc1MC9zZHJhbV9pbml0LmMKaW5kZXggYTQ3OWYwZi4uMDI5MTkzNyAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2k3NTAvc2RyYW1faW5pdC5jCisrKyBiL2JvYXJkL2VzZC9jcGNpNzUwL3NkcmFtX2luaXQuYwpAQCAtMTU3MCw4ICsxNTcwLDggQEAKICAgICBmb3IgKGNudCA9IFNUQVJUVkFML3NpemVvZihsb25nKTsgY250IDwgbWF4c2l6ZS9zaXplb2YobG9uZyk7IGNudCA8PD0gMSkgewogCSAgICBhZGRyID0gYmFzZSArIGNudDsJLyogcG9pbnRlciBhcml0aCEgKi8KIAotCSAgICBzYXZlMT0qYWRkcjsJCS8qIHNhdmUgY29udGVudHMgb2YgYWRkciAqLwotCSAgICBzYXZlMj0qYjsJCS8qIHNhdmUgY29udGVudHMgb2YgYmFzZSAqLworCSAgICBzYXZlMSA9ICphZGRyOwkJLyogc2F2ZSBjb250ZW50cyBvZiBhZGRyICovCisJICAgIHNhdmUyID0gKmI7CQkvKiBzYXZlIGNvbnRlbnRzIG9mIGJhc2UgKi8KIAogCSAgICAqYWRkcj1jbnQ7CQkvKiB3cml0ZSBjbnQgdG8gYWRkciAqLwogCSAgICAqYj0wOwkJCS8qIHB1dCBudWxsIGF0IGJhc2UgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9wbWM0NDAvcG1jNDQwLmMgYi9ib2FyZC9lc2QvcG1jNDQwL3BtYzQ0MC5jCmluZGV4IDViODExYmIuLjBjZGFlZTQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9wbWM0NDAvcG1jNDQwLmMKKysrIGIvYm9hcmQvZXNkL3BtYzQ0MC9wbWM0NDAuYwpAQCAtODc2LDI0ICs4NzYsMyBAQAogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9PSENJKSAmJiBkZWZpbmVkKENGR19VU0JfT0hDSV9CT0FSRF9JTklUKSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKLXZvaWQgZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCi17Ci0JdTMyIHZhbFs0XTsKLQlpbnQgcmM7Ci0KLQlmdF9jcHVfc2V0dXAoYmxvYiwgYmQpOwotCi0JLyogRml4dXAgTk9SIG1hcHBpbmcgKi8KLQl2YWxbMF0gPSAwOwkJCQkvKiBjaGlwIHNlbGVjdCBudW1iZXIgKi8KLQl2YWxbMV0gPSAwOwkJCQkvKiBhbHdheXMgMCAqLwotCXZhbFsyXSA9IGdkLT5iZC0+YmlfZmxhc2hzdGFydDsKLQl2YWxbM10gPSBnZC0+YmQtPmJpX2ZsYXNoc2l6ZTsKLQlyYyA9IGZkdF9maW5kX2FuZF9zZXRwcm9wKGJsb2IsICIvcGxiL29wYi9lYmMiLCAicmFuZ2VzIiwKLQkJCQkgIHZhbCwgc2l6ZW9mKHZhbCksIDEpOwotCWlmIChyYykKLQkJcHJpbnRmKCJVbmFibGUgdG8gdXBkYXRlIHByb3BlcnR5IE5PUiBtYXBwaW5nLCBlcnI9JXNcbiIsCi0JCSAgICAgICBmZHRfc3RyZXJyb3IocmMpKTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvZXRoLmMgYi9ib2FyZC9ldmI2NDI2MC9ldGguYwppbmRleCA2MThhZjZmLi5mYTViNmQ0IDEwMDY0NAotLS0gYS9ib2FyZC9ldmI2NDI2MC9ldGguYworKysgYi9ib2FyZC9ldmI2NDI2MC9ldGguYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJaW50IGV0aF9sZW49MDsKIAljaGFyICpldGhfZGF0YTsKIAotCWV0aDBfcnhfZGVzY19zaW5nbGUgKnJ4PSZwLT5ldGhfcnhfZGVzY1socC0+cmRuKV07CisJZXRoMF9yeF9kZXNjX3NpbmdsZSAqcnggPSAmcC0+ZXRoX3J4X2Rlc2NbKHAtPnJkbildOwogCiAJSU5WQUxJREFURV9EQ0FDSEUoKHVuc2lnbmVkIGludClyeCwodW5zaWduZWQgaW50KShyeCsxKSk7CiAKQEAgLTI1Miw3ICsyNTIsNyBAQAogI2lmZGVmIERFQlVHCiAJdW5zaWduZWQgaW50IG9sZF9jb21tYW5kX3N0YXQsb2xkX3BzcjsKICNlbmRpZgotCWV0aDBfdHhfZGVzY19zaW5nbGUgKnR4PSZkZXYtPmV0aF90eF9kZXNjW2Rldi0+dGRuXTsKKwlldGgwX3R4X2Rlc2Nfc2luZ2xlICp0eCA9ICZkZXYtPmV0aF90eF9kZXNjW2Rldi0+dGRuXTsKIAogCS8qIHdhaXQgZm9yIHR4IHRvIGJlIHJlYWR5ICovCiAJSU5WQUxJREFURV9EQ0FDSEUoKHVuc2lnbmVkIGludCl0eCwodW5zaWduZWQgaW50KSh0eCsxKSk7CmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC9tcHNjLmMgYi9ib2FyZC9ldmI2NDI2MC9tcHNjLmMKaW5kZXggOWU4YmZlMC4uM2IzMzhjNyAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvbXBzYy5jCisrKyBiL2JvYXJkL2V2YjY0MjYwL21wc2MuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiBpbnQKIG1wc2NfdGVzdF9jaGFyKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwPSZyeF9kZXNjX2Jhc2VbcnhfZGVzY19pbmRleCo4XTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnAgPSAmcnhfZGVzY19iYXNlW3J4X2Rlc2NfaW5kZXgqOF07CiAKIAlJTlZBTElEQVRFX0RDQUNIRSgmcFsxXSwgJnBbMl0pOwogCmRpZmYgLS1naXQgYS9ib2FyZC9mYWRzL2ZsYXNoLmMgYi9ib2FyZC9mYWRzL2ZsYXNoLmMKaW5kZXggZjBmYjYyMS4uN2NkYTNhNCAxMDA2NDQKLS0tIGEvYm9hcmQvZmFkcy9mbGFzaC5jCisrKyBiL2JvYXJkL2ZhZHMvZmxhc2guYwpAQCAtOTAsNyArOTAsNyBAQAogCWRlZmF1bHQ6CiAJCXBkX3NpemUgPSAwOwogCQlvcl9hbSA9IDB4RkZFMDAwMDA7Ci0JCXByaW50ZigiIyMgVW5zdXBwb3J0ZWQgZmxhc2ggZGV0ZWN0ZWQgYnkgQkNTUjogMHglMDhYXG4iLCBiY3NyWzJdKTsKKwkJcHJpbnRmKCIjIyBVbnN1cHBvcnRlZCBmbGFzaCBkZXRlY3RlZCBieSBCQ1NSOiAweCUwOGxYXG4iLCBiY3NyWzJdKTsKIAl9CiAKIAl0b3RhbF9zaXplID0gMDsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vc3lzX2VlcHJvbS5jIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9zeXNfZWVwcm9tLmMKaW5kZXggOGIxM2QwNi4uZTUzZWFkMCAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9zeXNfZWVwcm9tLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9zeXNfZWVwcm9tLmMKQEAgLTEsNyArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAyMDA2LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCiAgKiBZb3JrIFN1biAoeW9ya3N1bkBmcmVlc2NhbGUuY29tKQogICogSGFpeWluZyBXYW5nIChoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbSkKKyAqIFRpbXVyIFRhYmkgKHRpbXVyQGZyZWVzY2FsZS5jb20pCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCkBAIC0yNywyNTggKzI4LDQ0MSBAQAogI2luY2x1ZGUgPGkyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKLXR5cGVkZWYgc3RydWN0IHsKLQl1OCBpZFs0XTsJCS8qIDB4MDAwMCAtIDB4MDAwMyBFRVBST00gVGFnICovCi0JdTggc25bMTJdOwkJLyogMHgwMDA0IC0gMHgwMDBGIFNlcmlhbCBOdW1iZXIgKi8KLQl1OCBlcnJhdGFbNV07CQkvKiAweDAwMTAgLSAweDAwMTQgRXJyYXRhIExldmVsICovCi0JdTggZGF0ZVs2XTsJCS8qIDB4MDAxNSAtIDB4MDAxYSBCdWlsZCBEYXRlICovCi0JdTggcmVzXzA7CQkvKiAweDAwMWIJICAgUmVzZXJ2ZWQgKi8KLQl1OCB2ZXJzaW9uWzRdOwkJLyogMHgwMDFjIC0gMHgwMDFmIFZlcnNpb24gKi8KLQl1OCB0ZW1wY2FsWzhdOwkJLyogMHgwMDIwIC0gMHgwMDI3IFRlbXBlcmF0dXJlIENhbGlicmF0aW9uIEZhY3RvcnMqLwotCXU4IHRlbXBjYWxzeXNbMl07CS8qIDB4MDAyOCAtIDB4MDAyOSBTeXN0ZW0gVGVtcGVyYXR1cmUgQ2FsaWJyYXRpb24gRmFjdG9ycyovCi0JdTggcmVzXzFbMjJdOwkJLyogMHgwMDIwIC0gMHgwMDNmIFJlc2VydmVkICovCi0JdTggbWFjX3NpemU7CQkvKiAweDAwNDAJICAgTWFjIHRhYmxlIHNpemUgKi8KLQl1OCBtYWNfZmxhZzsJCS8qIDB4MDA0MQkgICBNYWMgdGFibGUgZmxhZ3MgKi8KLQl1OCBtYWNbOF1bNl07CQkvKiAweDAwNDIgLSAweDAwNzEgTWFjIGFkZHJlc3NlcyAqLwotCXUzMiBjcmM7CQkvKiAweDAwNzIJICAgY3JjMzIgY2hlY2tzdW0gKi8KLX0gRUVQUk9NX2RhdGE7CisjaW5jbHVkZSAiLi4vY29tbW9uL2VlcHJvbS5oIgogCi1zdGF0aWMgRUVQUk9NX2RhdGEgbWFjX2RhdGE7CisjaWYgIWRlZmluZWQoQ0ZHX0kyQ19FRVBST01fQ0NJRCkgJiYgIWRlZmluZWQoQ0ZHX0kyQ19FRVBST01fTlhJRCkKKyNlcnJvciAiUGxlYXNlIGRlZmluZSBlaXRoZXIgQ0ZHX0kyQ19FRVBST01fQ0NJRCBvciBDRkdfSTJDX0VFUFJPTV9OWElEIgorI2VuZGlmCiAKLWludCBtYWNfc2hvdyh2b2lkKQorLyoqCisgKiBzdGF0aWMgZWVwcm9tOiBFRVBST00gbGF5b3V0IGZvciBDQ0lEIG9yIE5YSUQgZm9ybWF0cworICoKKyAqIFNlZSBhcHBsaWNhdGlvbiBub3RlIEFOMzYzOCBmb3IgZGV0YWlscy4KKyAqLworc3RhdGljIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIGVlcHJvbSB7CisjaWZkZWYgQ0ZHX0kyQ19FRVBST01fQ0NJRAorCXU4IGlkWzRdOyAgICAgICAgIC8qIDB4MDAgLSAweDAzIEVFUFJPTSBUYWcgJ0NDSUQnICovCisJdTggbWFqb3I7ICAgICAgICAgLyogMHgwNCAgICAgICAgQm9hcmQgcmV2aXNpb24sIG1ham9yICovCisJdTggbWlub3I7ICAgICAgICAgLyogMHgwNSAgICAgICAgQm9hcmQgcmV2aXNpb24sIG1pbm9yICovCisJdTggc25bMTBdOyAgICAgICAgLyogMHgwNiAtIDB4MEYgU2VyaWFsIE51bWJlciovCisJdTggZXJyYXRhWzJdOyAgICAgLyogMHgxMCAtIDB4MTEgRXJyYXRhIExldmVsICovCisJdTggZGF0ZVs2XTsgICAgICAgLyogMHgxMiAtIDB4MTcgQnVpbGQgRGF0ZSAqLworCXU4IHJlc18wWzQwXTsgICAgIC8qIDB4MTggLSAweDNmIFJlc2VydmVkICovCisJdTggbWFjX2NvdW50OyAgICAgLyogMHg0MCAgICAgICAgTnVtYmVyIG9mIE1BQyBhZGRyZXNzZXMgKi8KKwl1OCBtYWNfZmxhZzsgICAgICAvKiAweDQxICAgICAgICBNQUMgdGFibGUgZmxhZ3MgKi8KKwl1OCBtYWNbOF1bNl07ICAgICAvKiAweDQyIC0gMHg3MSBNQUMgYWRkcmVzc2VzICovCisJdTMyIGNyYzsgICAgICAgICAgLyogMHg3MiAgICAgICAgQ1JDMzIgY2hlY2tzdW0gKi8KKyNlbmRpZgorI2lmZGVmIENGR19JMkNfRUVQUk9NX05YSUQKKwl1OCBpZFs0XTsgICAgICAgICAvKiAweDAwIC0gMHgwMyBFRVBST00gVGFnICdOWElEJyAqLworCXU4IHNuWzEyXTsgICAgICAgIC8qIDB4MDQgLSAweDBGIFNlcmlhbCBOdW1iZXIgKi8KKwl1OCBlcnJhdGFbNV07ICAgICAvKiAweDEwIC0gMHgxNCBFcnJhdGEgTGV2ZWwgKi8KKwl1OCBkYXRlWzZdOyAgICAgICAvKiAweDE1IC0gMHgxYSBCdWlsZCBEYXRlICovCisJdTggcmVzXzA7ICAgICAgICAgLyogMHgxYiAgICAgICAgUmVzZXJ2ZWQgKi8KKwl1MzIgdmVyc2lvbjsgICAgICAvKiAweDFjIC0gMHgxZiBOWElEIFZlcnNpb24gKi8KKwl1OCB0ZW1wY2FsWzhdOyAgICAvKiAweDIwIC0gMHgyNyBUZW1wZXJhdHVyZSBDYWxpYnJhdGlvbiBGYWN0b3JzICovCisJdTggdGVtcGNhbHN5c1syXTsgLyogMHgyOCAtIDB4MjkgU3lzdGVtIFRlbXBlcmF0dXJlIENhbGlicmF0aW9uIEZhY3RvcnMgKi8KKwl1OCB0ZW1wY2FsZmxhZ3M7ICAvKiAweDJhICAgICAgICBUZW1wZXJhdHVyZSBDYWxpYnJhdGlvbiBGbGFncyAqLworCXU4IHJlc18xWzIxXTsgICAgIC8qIDB4MmIgLSAweDNmIFJlc2VydmVkICovCisJdTggbWFjX2NvdW50OyAgICAgLyogMHg0MCAgICAgICAgTnVtYmVyIG9mIE1BQyBhZGRyZXNzZXMgKi8KKwl1OCBtYWNfZmxhZzsgICAgICAvKiAweDQxICAgICAgICBNQUMgdGFibGUgZmxhZ3MgKi8KKwl1OCBtYWNbOF1bNl07ICAgICAvKiAweDQyIC0gMHg3MSBNQUMgYWRkcmVzc2VzICovCisJdTMyIGNyYzsgICAgICAgICAgLyogMHg3MiAgICAgICAgQ1JDMzIgY2hlY2tzdW0gKi8KKyNlbmRpZgorfSBlOworCisvKiBTZXQgdG8gMSBpZiB3ZSd2ZSByZWFkIEVFUFJPTSBpbnRvIG1lbW9yeSAqLworc3RhdGljIGludCBoYXNfYmVlbl9yZWFkID0gMDsKKworI2lmZGVmIENGR19JMkNfRUVQUk9NX05YSUQKKy8qIElzIHRoaXMgYSB2YWxpZCBOWElEIEVFUFJPTT8gKi8KKyNkZWZpbmUgaXNfdmFsaWQgKCooKHUzMiAqKWUuaWQpID09ICgoJ04nIDw8IDI0KSB8ICgnWCcgPDwgMTYpIHwgKCdJJyA8PCA4KSB8ICdEJykpCisjZW5kaWYKKworI2lmZGVmIENGR19JMkNfRUVQUk9NX0NDSUQKKy8qIElzIHRoaXMgYSB2YWxpZCBDQ0lEIEVFUFJPTT8gKi8KKyNkZWZpbmUgaXNfdmFsaWQgKCooKHUzMiAqKWUuaWQpID09ICgoJ0MnIDw8IDI0KSB8ICgnQycgPDwgMTYpIHwgKCdJJyA8PCA4KSB8ICdEJykpCisjZW5kaWYKKworLyoqCisgKiBzaG93X2VlcHJvbSAtIGRpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIHRoZSBFRVBST00KKyAqLworc3RhdGljIHZvaWQgc2hvd19lZXByb20odm9pZCkKIHsKIAlpbnQgaTsKLQl1OCBtYWNfc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIGV0aGFkZHJbOF1bMThdOwotCXVuc2lnbmVkIGNoYXIgZW5ldHZhclszMl07CisJdW5zaWduZWQgaW50IGNyYzsKIAotCS8qIFNob3cgRUVQUk9NIHRhZ0lELAotCSAqIGFsd2F5cyB0aGUgZm91ciBjaGFyYWN0ZXJzICdOWElEJy4KLQkgKi8KLQlwcmludGYoIklEICIpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCXByaW50ZigiJWMiLCBtYWNfZGF0YS5pZFtpXSk7Ci0JcHJpbnRmKCJcbiIpOworCS8qIEVFUFJPTSB0YWcgSUQsIGVpdGhlciBDQ0lEIG9yIE5YSUQgKi8KKyNpZmRlZiBDRkdfSTJDX0VFUFJPTV9OWElECisJcHJpbnRmKCJJRDogJWMlYyVjJWMgdiV1XG4iLCBlLmlkWzBdLCBlLmlkWzFdLCBlLmlkWzJdLCBlLmlkWzNdLAorCQliZTMyX3RvX2NwdShlLnZlcnNpb24pKTsKKyNlbHNlCisJcHJpbnRmKCJJRDogJWMlYyVjJWNcbiIsIGUuaWRbMF0sIGUuaWRbMV0sIGUuaWRbMl0sIGUuaWRbM10pOworI2VuZGlmCiAKLQkvKiBTaG93IFNlcmlhbCBudW1iZXIsCi0JICogMCB0byAxMSBjaGFyYXRlcnMgb2YgZXJyYXRhIGluZm9ybWF0aW9uLgotCSAqLwotCXByaW50ZigiU04gIik7Ci0JZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCi0JCXByaW50ZigiJWMiLCBtYWNfZGF0YS5zbltpXSk7Ci0JcHJpbnRmKCJcbiIpOworCS8qIFNlcmlhbCBudW1iZXIgKi8KKwlwcmludGYoIlNOOiAlc1xuIiwgZS5zbik7CiAKLQkvKiBTaG93IEVycmF0YSBMZXZlbCwKLQkgKiAwIHRvIDQgY2hhcmFjdGVycyBvZiBlcnJhdGEgaW5mb3JtYXRpb24uCi0JICovCi0JcHJpbnRmKCJFcnJhdGEgIik7Ci0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJcHJpbnRmKCIlYyIsIG1hY19kYXRhLmVycmF0YVtpXSk7Ci0JcHJpbnRmKCJcbiIpOworCS8qIEVycmF0YSBsZXZlbC4gKi8KKyNpZmRlZiBDRkdfSTJDX0VFUFJPTV9OWElECisJcHJpbnRmKCJFcnJhdGE6ICVzXG4iLCBlLmVycmF0YSk7CisjZWxzZQorCXByaW50ZigiRXJyYXRhOiAlYyVjXG4iLAorCQllLmVycmF0YVswXSA/IGUuZXJyYXRhWzBdIDogJy4nLAorCQllLmVycmF0YVsxXSA/IGUuZXJyYXRhWzFdIDogJy4nKTsKKyNlbmRpZgogCi0JLyogU2hvdyBCdWlsZCBEYXRlLAotCSAqIEJDRCBkYXRlIHZhbHVlcywgYXMgWVlNTUREaGhtbXNzLgotCSAqLwotCXByaW50ZigiRGF0ZSAyMCUwMngvJTAyeC8lMDJ4ICUwMng6JTAyeDolMDJ4XG4iLAotCSAgICAgICBtYWNfZGF0YS5kYXRlWzBdLAotCSAgICAgICBtYWNfZGF0YS5kYXRlWzFdLAotCSAgICAgICBtYWNfZGF0YS5kYXRlWzJdLAotCSAgICAgICBtYWNfZGF0YS5kYXRlWzNdLAotCSAgICAgICBtYWNfZGF0YS5kYXRlWzRdLAotCSAgICAgICBtYWNfZGF0YS5kYXRlWzVdKTsKKwkvKiBCdWlsZCBkYXRlLCBCQ0QgZGF0ZSB2YWx1ZXMsIGFzIFlZTU1ERGhobW1zcyAqLworCXByaW50ZigiQnVpbGQgZGF0ZTogMjAlMDJ4LyUwMngvJTAyeCAlMDJ4OiUwMng6JTAyeCAlc1xuIiwKKwkJZS5kYXRlWzBdLCBlLmRhdGVbMV0sIGUuZGF0ZVsyXSwKKwkJZS5kYXRlWzNdICYgMHg3RiwgZS5kYXRlWzRdLCBlLmRhdGVbNV0sCisJCWUuZGF0ZVszXSAmIDB4ODAgPyAiUE0iIDogIiIpOwogCi0JLyogU2hvdyBNQUMgdGFibGUgc2l6ZSwKLQkgKiBWYWx1ZSBmcm9tIDAgdG8gNyBpbmRpY2F0aW5nIGhvdyBtYW55IE1BQwotCSAqIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGluIHRoZSBzeXN0ZW0gRUVQUk9NLgotCSAqLwotCWlmKChtYWNfZGF0YS5tYWNfc2l6ZSA+IDApICYmIChtYWNfZGF0YS5tYWNfc2l6ZSA8PSA4KSkKLQkJbWFjX3NpemUgPSBtYWNfZGF0YS5tYWNfc2l6ZTsKKwkvKiBTaG93IE1BQyBhZGRyZXNzZXMgICovCisJZm9yIChpID0gMDsgaSA8IG1pbihlLm1hY19jb3VudCwgOCk7IGkrKykgeworCQl1OCAqcCA9IGUubWFjW2ldOworCisJCXByaW50ZigiRXRoJXU6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBpLAorCQkJcFswXSwgcFsxXSwgcFsyXSwgcFszXSwJcFs0XSwgcFs1XSk7CisJfQorCisJY3JjID0gY3JjMzIoMCwgKHZvaWQgKikmZSwgc2l6ZW9mKGUpIC0gNCk7CisKKwlpZiAoY3JjID09IGJlMzJfdG9fY3B1KGUuY3JjKSkKKwkJcHJpbnRmKCJDUkM6ICUwOHhcbiIsIGJlMzJfdG9fY3B1KGUuY3JjKSk7CiAJZWxzZQotCQltYWNfc2l6ZSA9IDg7IC8qIFNldCB0aGUgbWF4IHNpemUgKi8KLQlwcmludGYoIk1BQ1NJWkUgJXhcbiIsIG1hY19zaXplKTsKKwkJcHJpbnRmKCJDUkM6ICUwOHggKHNob3VsZCBiZSAlMDh4KVxuIiwKKwkJCWJlMzJfdG9fY3B1KGUuY3JjKSwgY3JjKTsKIAotCS8qIFNob3cgTWFjIGFkZHJlc3NlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBtYWNfc2l6ZTsgaSsrKSB7Ci0JCXNwcmludGYoKGNoYXIgKilldGhhZGRyW2ldLAotCQkJIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKLQkJCW1hY19kYXRhLm1hY1tpXVswXSwKLQkJCW1hY19kYXRhLm1hY1tpXVsxXSwKLQkJCW1hY19kYXRhLm1hY1tpXVsyXSwKLQkJCW1hY19kYXRhLm1hY1tpXVszXSwKLQkJCW1hY19kYXRhLm1hY1tpXVs0XSwKLQkJCW1hY19kYXRhLm1hY1tpXVs1XSk7Ci0JCXByaW50ZigiTUFDICVkICVzXG4iLCBpLCBldGhhZGRyW2ldKTsKLQotCQlzcHJpbnRmKChjaGFyICopZW5ldHZhciwKLQkJCWkgPyAiZXRoJWRhZGRyIiA6ICJldGhhZGRyIiwgaSk7Ci0JCXNldGVudigoY2hhciAqKWVuZXR2YXIsIChjaGFyICopZXRoYWRkcltpXSk7Ci0KKyNpZmRlZiBERUJVRworCXByaW50ZigiRUVQUk9NIGR1bXA6ICgweCV4IGJ5dGVzKVxuIiwgc2l6ZW9mKGUpKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGUpOyBpKyspIHsKKwkJaWYgKChpICUgMTYpID09IDApCisJCQlwcmludGYoIiUwMlg6ICIsIGkpOworCQlwcmludGYoIiUwMlggIiwgKCh1OCAqKSZlKVtpXSk7CisJCWlmICgoKGkgJSAxNikgPT0gMTUpIHx8IChpID09IHNpemVvZihlKSAtIDEpKQorCQkJcHJpbnRmKCJcbiIpOwogCX0KLQotCXJldHVybiAwOworI2VuZGlmCiB9CiAKLWludCBtYWNfcmVhZCh2b2lkKQorLyoqCisgKiByZWFkX2VlcHJvbSAtIHJlYWQgdGhlIEVFUFJPTSBpbnRvIG1lbW9yeQorICovCitzdGF0aWMgaW50IHJlYWRfZWVwcm9tKHZvaWQpCiB7Ci0JaW50IHJldCwgbGVuZ3RoOwotCXVuc2lnbmVkIGludCBjcmMgPSAwOwotCXVuc2lnbmVkIGNoYXIgZGV2ID0gSURfRUVQUk9NX0FERFIsICpkYXRhOworCWludCByZXQ7CisjaWZkZWYgQ0ZHX0VFUFJPTV9CVVNfTlVNCisJdW5zaWduZWQgaW50IGJ1czsKKyNlbmRpZgogCi0JbGVuZ3RoID0gc2l6ZW9mKEVFUFJPTV9kYXRhKTsKLQlyZXQgPSBpMmNfcmVhZChkZXYsIDAsIDEsICh1bnNpZ25lZCBjaGFyICopKCZtYWNfZGF0YSksIGxlbmd0aCk7Ci0JaWYgKHJldCkgewotCQlwcmludGYoIlJlYWQgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9CisJaWYgKGhhc19iZWVuX3JlYWQpCisJCXJldHVybiAwOwogCi0JZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopKCZtYWNfZGF0YSk7Ci0JcHJpbnRmKCJDaGVjayBDUkMgb24gcmVhZGluZyAuLi4iKTsKLQljcmMgPSBjcmMzMihjcmMsIGRhdGEsIGxlbmd0aCAtIDQpOwotCWlmIChjcmMgIT0gbWFjX2RhdGEuY3JjKSB7Ci0JCXByaW50ZigiQ1JDIGNoZWNrc3VtIGlzIGludmFsaWQsIGluIEVFUFJPTSBDUkMgaXMgJXgsIGNhbGN1bGF0ZWQgQ1JDIGlzICV4XG4iLAotCQkgICAgIG1hY19kYXRhLmNyYywgY3JjKTsKLQkJcmV0dXJuIC0xOwotCX0gZWxzZSB7Ci0JCXByaW50ZigiQ1JDIE9LXG4iKTsKLQkJbWFjX3Nob3coKTsKLQl9Ci0JcmV0dXJuIDA7CisjaWZkZWYgQ0ZHX0VFUFJPTV9CVVNfTlVNCisJYnVzID0gaTJjX2dldF9idXNfbnVtKCk7CisJaTJjX3NldF9idXNfbnVtKENGR19FRVBST01fQlVTX05VTSk7CisjZW5kaWYKKworCXJldCA9IGkyY19yZWFkKENGR19JMkNfRUVQUk9NX0FERFIsIDAsIENGR19JMkNfRUVQUk9NX0FERFJfTEVOLAorCQkodm9pZCAqKSZlLCBzaXplb2YoZSkpOworCisjaWZkZWYgQ0ZHX0VFUFJPTV9CVVNfTlVNCisJaTJjX3NldF9idXNfbnVtKGJ1cyk7CisjZW5kaWYKKworI2lmZGVmIERFQlVHCisJc2hvd19lZXByb20oKTsKKyNlbmRpZgorCisJaGFzX2JlZW5fcmVhZCA9IChyZXQgPT0gMCkgPyAxIDogMDsKKworCXJldHVybiByZXQ7CiB9CiAKLWludCBtYWNfcHJvZyh2b2lkKQorLyoqCisgKiBwcm9nX2VlcHJvbSAtIHdyaXRlIHRoZSBFRVBST00gZnJvbSBtZW1vcnkKKyAqLworc3RhdGljIGludCBwcm9nX2VlcHJvbSh2b2lkKQogewogCWludCByZXQsIGksIGxlbmd0aDsKLQl1bnNpZ25lZCBpbnQgY3JjID0gMDsKLQl1bnNpZ25lZCBjaGFyIGRldiA9IElEX0VFUFJPTV9BRERSLCAqcHRyOwotCXVuc2lnbmVkIGNoYXIgKmVlcHJvbV9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikoJm1hY19kYXRhKTsKKwl1bnNpZ25lZCBpbnQgY3JjOworCXZvaWQgKnA7CisjaWZkZWYgQ0ZHX0VFUFJPTV9CVVNfTlVNCisJdW5zaWduZWQgaW50IGJ1czsKKyNlbmRpZgogCi0JbWFjX2RhdGEucmVzXzAgPSAwOwotCW1lbXNldCgodm9pZCAqKW1hY19kYXRhLnJlc18xLCAwLCBzaXplb2YobWFjX2RhdGEucmVzXzEpKTsKKwkvKiBTZXQgdGhlIHJlc2VydmVkIHZhbHVlcyB0byAweEZGICAgKi8KKyNpZmRlZiBDRkdfSTJDX0VFUFJPTV9OWElECisJZS5yZXNfMCA9IDB4RkY7CisJbWVtc2V0KGUucmVzXzEsIDB4RkYsIHNpemVvZihlLnJlc18xKSk7CisjZWxzZQorCW1lbXNldChlLnJlc18wLCAweEZGLCBzaXplb2YoZS5yZXNfMCkpOworI2VuZGlmCiAKLQlsZW5ndGggPSBzaXplb2YoRUVQUk9NX2RhdGEpOwotCWNyYyA9IGNyYzMyKGNyYywgZWVwcm9tX2RhdGEsIGxlbmd0aCAtIDQpOwotCW1hY19kYXRhLmNyYyA9IGNyYzsKLQlmb3IgKGkgPSAwLCBwdHIgPSBlZXByb21fZGF0YTsgaSA8IGxlbmd0aDsgaSArPSA4LCBwdHIgKz0gOCkgewotCQlyZXQgPSBpMmNfd3JpdGUoZGV2LCBpLCAxLCBwdHIsIG1pbigobGVuZ3RoIC0gaSksOCkpOwotCQl1ZGVsYXkoNTAwMCk7CS8qIDVtcyB3cml0ZSBjeWNsZSB0aW1pbmcgKi8KKwlsZW5ndGggPSBzaXplb2YoZSk7CisJY3JjID0gY3JjMzIoMCwgKHZvaWQgKikmZSwgbGVuZ3RoIC0gNCk7CisJZS5jcmMgPSBjcHVfdG9fYmUzMihjcmMpOworCisjaWZkZWYgQ0ZHX0VFUFJPTV9CVVNfTlVNCisJYnVzID0gaTJjX2dldF9idXNfbnVtKCk7CisJaTJjX3NldF9idXNfbnVtKENGR19FRVBST01fQlVTX05VTSk7CisjZW5kaWYKKworCWZvciAoaSA9IDAsIHAgPSAmZTsgaSA8IGxlbmd0aDsgaSArPSA4LCBwICs9IDgpIHsKKwkJcmV0ID0gaTJjX3dyaXRlKENGR19JMkNfRUVQUk9NX0FERFIsIGksIENGR19JMkNfRUVQUk9NX0FERFJfTEVOLAorCQkJcCwgbWluKChsZW5ndGggLSBpKSwgOCkpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CisJCXVkZWxheSg1MDAwKTsJLyogNW1zIHdyaXRlIGN5Y2xlIHRpbWluZyAqLwogCX0KKworI2lmZGVmIENGR19FRVBST01fQlVTX05VTQorCWkyY19zZXRfYnVzX251bShidXMpOworI2VuZGlmCisKIAlpZiAocmV0KSB7CiAJCXByaW50ZigiUHJvZ3JhbW1pbmcgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtMTsKLQl9IGVsc2UgewotCQlwcmludGYoIlByb2dyYW1taW5nICVkIGJ5dGVzLiBSZWFkaW5nIGJhY2sgLi4uXG4iLCBsZW5ndGgpOwotCQltYWNfcmVhZCgpOwogCX0KKworCXByaW50ZigiUHJvZ3JhbW1pbmcgcGFzc2VkLlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBkb19tYWMoY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorLyoqCisgKiBoMmkgLSBjb252ZXJ0cyBoZXggY2hhcmFjdGVyIGludG8gYSBudW1iZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIChlLmcuICc3JyBvciAnQycpIGFuZCByZXR1cm5zCisgKiB0aGUgaW50ZWdlciBlcXVpdmFsZW50LgorICovCitzdGF0aWMgaW5saW5lIHU4IGgyaShjaGFyIHApCit7CisJaWYgKChwID49ICcwJykgJiYgKHAgPD0gJzknKSkKKwkJcmV0dXJuIHAgLSAnMCc7CisKKwlpZiAoKHAgPj0gJ0EnKSAmJiAocCA8PSAnRicpKQorCQlyZXR1cm4gKHAgLSAnQScpICsgMTA7CisKKwlpZiAoKHAgPj0gJ2EnKSAmJiAocCA8PSAnZicpKQorCQlyZXR1cm4gKHAgLSAnYScpICsgMTA7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzZXRfZGF0ZSAtIHN0b3JlcyB0aGUgYnVpbGQgZGF0ZSBpbnRvIHRoZSBFRVBST00KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcG9pbnRlciB0byBhIHN0cmluZyBpbiB0aGUgZm9ybWF0ICJZWU1NRERoaG1tc3MiCisgKiAoMi1kaWdpdCB5ZWFyLCAyLWRpZ2l0IG1vbnRoLCBldGMpLCBjb252ZXJ0cyBpdCB0byBhIDYtYnl0ZSBCQ0Qgc3RyaW5nLAorICogYW5kIHN0b3JlcyBpdCBpbiB0aGUgYnVpbGQgZGF0ZSBmaWVsZCBvZiB0aGUgRUVQUk9NIGxvY2FsIGNvcHkuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9kYXRlKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChzdHJsZW4oc3RyaW5nKSAhPSAxMikgeworCQlwcmludGYoIlVzYWdlOiBtYWMgZGF0ZSBZWU1NRERoaG1tc3NcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJZS5kYXRlW2ldID0gaDJpKHN0cmluZ1syICogaV0pIDw8IDQgfCBoMmkoc3RyaW5nWzIgKiBpICsgMV0pOworfQorCisvKioKKyAqIHNldF9tYWNfYWRkcmVzcyAtIHN0b3JlcyBhIE1BQyBhZGRyZXNzIGludG8gdGhlIEVFUFJPTQorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwb2ludGVyIHRvIE1BQyBhZGRyZXNzIHN0cmluZworICogKGkuZS4iWFg6WFg6WFg6WFg6WFg6WFgiLCB3aGVyZSAiWFgiIGlzIGEgdHdvLWRpZ2l0IGhleCBudW1iZXIpIGFuZAorICogc3RvcmVzIGl0IGluIG9uZSBvZiB0aGUgTUFDIGFkZHJlc3MgZmllbGRzIG9mIHRoZSBFRVBST00gbG9jYWwgY29weS4KKyAqLworc3RhdGljIHZvaWQgc2V0X21hY19hZGRyZXNzKHVuc2lnbmVkIGludCBpbmRleCwgY29uc3QgY2hhciAqc3RyaW5nKQoreworCWNoYXIgKnAgPSAoY2hhciAqKSBzdHJpbmc7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoIXN0cmluZykgeworCQlwcmludGYoIlVzYWdlOiBtYWMgPG4+IFhYOlhYOlhYOlhYOlhYOlhYXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7ICpwICYmIChpIDwgNik7IGkrKykgeworCQllLm1hY1tpbmRleF1baV0gPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMTYpOworCQlpZiAoKnAgPT0gJzonKQorCQkJcCsrOworCX0KK30KKworaW50IGRvX21hYyhjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlpbnQgaTsKLQljaGFyIGNtZCA9ICdzJzsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWFjX3ZhbDsKKwljaGFyIGNtZDsKIAotCWlmIChpMmNfcHJvYmUoSURfRUVQUk9NX0FERFIpICE9IDApCi0JCXJldHVybiAtMTsKKwlpZiAoYXJnYyA9PSAxKSB7CisJCXNob3dfZWVwcm9tKCk7CisJCXJldHVybiAwOworCX0KIAotCWlmIChhcmdjID4gMSkgewotCQljbWQgPSBhcmd2WzFdWzBdOworCWNtZCA9IGFyZ3ZbMV1bMF07CisKKwlpZiAoY21kID09ICdyJykgeworCQlyZWFkX2VlcHJvbSgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGNtZCA9PSAnaScpICYmIChhcmdjID4gMikpIHsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCWUuaWRbaV0gPSBhcmd2WzJdW2ldOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWlzX3ZhbGlkKSB7CisJCXByaW50ZigiUGxlYXNlIHJlYWQgdGhlIEVFUFJPTSAoJ3InKSBhbmQvb3Igc2V0IHRoZSBJRCAoJ2knKSBmaXJzdC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA9PSAyKSB7CiAJCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgJ3InOgkvKiBkaXNwbGF5ICovCi0JCQltYWNfcmVhZCgpOwotCQkJYnJlYWs7CiAJCWNhc2UgJ3MnOgkvKiBzYXZlICovCi0JCQltYWNfcHJvZygpOworCQkJcHJvZ19lZXByb20oKTsKIAkJCWJyZWFrOwotCQljYXNlICdpJzoJLyogaWQgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCQltYWNfZGF0YS5pZFtpXSA9IGFyZ3ZbMl1baV07Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAnbic6CS8qIHNlcmlhbCBudW1iZXIgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7Ci0JCQkJbWFjX2RhdGEuc25baV0gPSBhcmd2WzJdW2ldOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgJ2UnOgkvKiBlcnJhdGEgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCQltYWNfZGF0YS5lcnJhdGFbaV0gPSBhcmd2WzJdW2ldOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgJ2QnOgkvKiBkYXRlICovCi0JCQltYWNfdmFsID0gc2ltcGxlX3N0cnRvdWxsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJCQltYWNfZGF0YS5kYXRlW2ldID0gKG1hY192YWwgPj4gKDQwIC0gOCAqIGkpKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlICdwJzoJLyogbWFjIHRhYmxlIHNpemUgKi8KLQkJCW1hY19kYXRhLm1hY19zaXplID0KLQkJCSAgICAodW5zaWduZWQgY2hhcilzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxNik7Ci0JCQlicmVhazsKLQkJY2FzZSAnMCc6CS8qIG1hYyAwICovCi0JCWNhc2UgJzEnOgkvKiBtYWMgMSAqLwotCQljYXNlICcyJzoJLyogbWFjIDIgKi8KLQkJY2FzZSAnMyc6CS8qIG1hYyAzICovCi0JCWNhc2UgJzQnOgkvKiBtYWMgNCAqLwotCQljYXNlICc1JzoJLyogbWFjIDUgKi8KLQkJY2FzZSAnNic6CS8qIG1hYyA2ICovCi0JCWNhc2UgJzcnOgkvKiBtYWMgNyAqLwotCQkJbWFjX3ZhbCA9IHNpbXBsZV9zdHJ0b3VsbChhcmd2WzJdLCBOVUxMLCAxNik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCQkJbWFjX2RhdGEubWFjW2NtZCAtICcwJ11baV0gPQotCQkJCSAgICAqKCh1bnNpZ25lZCBjaGFyICopCi0JCQkJICAgICAgKCgodW5zaWduZWQgaW50KSgmbWFjX3ZhbCkpICsgaSArIDIpKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlICdoJzoJLyogaGVscCAqLwogCQlkZWZhdWx0OgogCQkJcHJpbnRmKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgewotCQltYWNfc2hvdygpOworCisJCXJldHVybiAwOwogCX0KKworCS8qIFdlIGtub3cgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyICAqLworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlICduJzoJLyogc2VyaWFsIG51bWJlciAqLworCQltZW1zZXQoZS5zbiwgMCwgc2l6ZW9mKGUuc24pKTsKKwkJc3RybmNweSgoY2hhciAqKWUuc24sIGFyZ3ZbMl0sIHNpemVvZihlLnNuKSAtIDEpOworCQlicmVhazsKKwljYXNlICdlJzoJLyogZXJyYXRhICovCisjaWZkZWYgQ0ZHX0kyQ19FRVBST01fTlhJRAorCQltZW1zZXQoZS5lcnJhdGEsIDAsIDUpOworCQlzdHJuY3B5KChjaGFyICopZS5lcnJhdGEsIGFyZ3ZbMl0sIDQpOworI2Vsc2UKKwkJZS5lcnJhdGFbMF0gPSBhcmd2WzJdWzBdOworCQllLmVycmF0YVsxXSA9IGFyZ3ZbMl1bMV07CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSAnZCc6CS8qIGRhdGUgQkNEIGZvcm1hdCBZWU1NRERoaG1tc3MgKi8KKwkJc2V0X2RhdGUoYXJndlsyXSk7CisJCWJyZWFrOworCWNhc2UgJ3AnOgkvKiBNQUMgdGFibGUgc2l6ZSAqLworCQllLm1hY19jb3VudCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKKwkJYnJlYWs7CisJY2FzZSAnMCcgLi4uICc3JzoJLyogIm1hYyAwIiB0aHJvdWdoICJtYWMgNyIgKi8KKwkJc2V0X21hY19hZGRyZXNzKGNtZCAtICcwJywgYXJndlsyXSk7CisJCWJyZWFrOworCWNhc2UgJ2gnOgkvKiBoZWxwICovCisJZGVmYXVsdDoKKwkJcHJpbnRmKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBtYWNfcmVhZF9mcm9tX2VlcHJvbSAtIHJlYWQgdGhlIE1BQyBhZGRyZXNzZXMgZnJvbSBFRVBST00KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBNQUMgYWRkcmVzc2VzIGZyb20gRUVQUk9NIGFuZCBzZXRzIHRoZQorICogYXBwcm9wcmlhdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBlYWNoIG9uZSByZWFkLgorICoKKyAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG9ubHkgc2V0IGlmIHRoZXkgaGF2ZW4ndCBiZWVuIHNldCBhbHJlYWR5LgorICogVGhpcyBlbnN1cmVzIHRoYXQgYW55IHVzZXItc2F2ZWQgdmFyaWFibGVzIGFyZSBuZXZlciBvdmVyd3JpdHRlbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIHJlbG9jYXRpb24uCisgKi8KIGludCBtYWNfcmVhZF9mcm9tX2VlcHJvbSh2b2lkKQogewotCWludCBsZW5ndGgsIGk7Ci0JdW5zaWduZWQgY2hhciBkZXYgPSBJRF9FRVBST01fQUREUjsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCXVuc2lnbmVkIGNoYXIgZXRoYWRkcls0XVsxOF07Ci0JdW5zaWduZWQgY2hhciBlbmV0dmFyWzMyXTsKLQl1bnNpZ25lZCBpbnQgY3JjID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWxlbmd0aCA9IHNpemVvZihFRVBST01fZGF0YSk7Ci0JaWYgKGkyY19yZWFkKGRldiwgMCwgMSwgKHVuc2lnbmVkIGNoYXIgKikoJm1hY19kYXRhKSwgbGVuZ3RoKSkgeworCWlmIChyZWFkX2VlcHJvbSgpKSB7CiAJCXByaW50ZigiUmVhZCBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKSgmbWFjX2RhdGEpOwotCWNyYyA9IGNyYzMyKGNyYywgZGF0YSwgbGVuZ3RoIC0gNCk7Ci0JaWYgKGNyYyAhPSBtYWNfZGF0YS5jcmMpIHsKKwlpZiAoIWlzX3ZhbGlkKSB7CisJCXByaW50ZigiSW52YWxpZCBJRCAoJTAyeCAlMDJ4ICUwMnggJTAyeClcbiIsIGUuaWRbMF0sIGUuaWRbMV0sIGUuaWRbMl0sIGUuaWRbM10pOwogCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJaWYgKG1lbWNtcCgmbWFjX2RhdGEubWFjW2ldLCAiXDBcMFwwXDBcMFwwIiwgNikpIHsKLQkJCQlzcHJpbnRmKChjaGFyICopZXRoYWRkcltpXSwKLQkJCQkJIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKLQkJCQkJbWFjX2RhdGEubWFjW2ldWzBdLAotCQkJCQltYWNfZGF0YS5tYWNbaV1bMV0sCi0JCQkJCW1hY19kYXRhLm1hY1tpXVsyXSwKLQkJCQkJbWFjX2RhdGEubWFjW2ldWzNdLAotCQkJCQltYWNfZGF0YS5tYWNbaV1bNF0sCi0JCQkJCW1hY19kYXRhLm1hY1tpXVs1XSk7Ci0JCQkJc3ByaW50ZigoY2hhciAqKWVuZXR2YXIsCi0JCQkJCWkgPyAiZXRoJWRhZGRyIiA6ICJldGhhZGRyIiwKLQkJCQkJaSk7Ci0JCQkJc2V0ZW52KChjaGFyICopZW5ldHZhciwgKGNoYXIgKilldGhhZGRyW2ldKTsKLQkJCX0KKwl9CisKKwlpZiAoYmUzMl90b19jcHUoZS5jcmMpICE9IDB4RkZGRkZGRkYpIHsKKwkJdTMyIGNyYyA9IGNyYzMyKDAsICh2b2lkICopJmUsIHNpemVvZihlKSAtIDQpOworCisJCWlmIChjcmMgIT0gYmUzMl90b19jcHUoZS5jcmMpKSB7CisJCQlwcmludGYoIkNSQyBtaXNtYXRjaCAoJTA4eCAhPSAlMDh4KS5cbiIsIGNyYywKKwkJCQliZTMyX3RvX2NwdShlLmNyYykpOworCQkJcmV0dXJuIC0xOwogCQl9CiAJfQorCisJZm9yIChpID0gMDsgaSA8IG1pbig0LCBlLm1hY19jb3VudCk7IGkrKykgeworCQlpZiAobWVtY21wKCZlLm1hY1tpXSwgIlwwXDBcMFwwXDBcMCIsIDYpICYmCisJCSAgICBtZW1jbXAoJmUubWFjW2ldLCAiXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGIiwgNikpIHsKKwkJCWNoYXIgZXRoYWRkclsxOF07CisJCQljaGFyIGVuZXR2YXJbOV07CisKKwkJCXNwcmludGYoZXRoYWRkciwgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwKKwkJCQllLm1hY1tpXVswXSwKKwkJCQllLm1hY1tpXVsxXSwKKwkJCQllLm1hY1tpXVsyXSwKKwkJCQllLm1hY1tpXVszXSwKKwkJCQllLm1hY1tpXVs0XSwKKwkJCQllLm1hY1tpXVs1XSk7CisJCQlzcHJpbnRmKGVuZXR2YXIsIGkgPyAiZXRoJWRhZGRyIiA6ICJldGhhZGRyIiwgaSk7CisJCQkvKiBPbmx5IGluaXRpYWxpemUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIGJsYW5rCisJCQkgKiAoaS5lLiBoYXZlIG5vdCB5ZXQgYmVlbiBzZXQpCisJCQkgKi8KKwkJCWlmICghZ2V0ZW52KGVuZXR2YXIpKQorCQkJCXNldGVudihlbmV0dmFyLCBldGhhZGRyKTsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQorCisjaWZkZWYgQ0ZHX0kyQ19FRVBST01fQ0NJRAorCisvKioKKyAqIGdldF9jcHVfYm9hcmRfcmV2aXNpb24gLSBnZXQgdGhlIENQVSBib2FyZCByZXZpc2lvbiBvbiA4NXh4IGJvYXJkcworICoKKyAqIFJlYWQgdGhlIEVFUFJPTSB0byBkZXRlcm1pbmUgdGhlIGJvYXJkIHJldmlzaW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSByZWxvY2F0aW9uLCBzbyB3ZSBuZWVkIHRvIHJlYWQgYSBwcml2YXRlCisgKiBjb3B5IG9mIHRoZSBFRVBST00gaW50byBhIGxvY2FsIHZhcmlhYmxlIG9uIHRoZSBzdGFjay4KKyAqCisgKiBBbHNvLCB3ZSBhc3N1bWUgdGhhdCBDRkdfRUVQUk9NX0JVU19OVU0gPT0gQ0ZHX1NQRF9CVVNfTlVNLiAgVGhlIGdsb2JhbAorICogdmFyaWFibGUgaTJjX2J1c19udW0gbXVzdCBiZSBjb21waWxlLXRpbWUgaW5pdGlhbGl6ZWQgdG8gQ0ZHX1NQRF9CVVNfTlVNLAorICogc28gdGhhdCB0aGUgU1BEIGNvZGUgd2lsbCB3b3JrLiAgVGhpcyBtZWFucyB0aGF0IGFsbCBwcmUtcmVsb2NhdGlvbiBJMkMKKyAqIG9wZXJhdGlvbnMgY2FuIG9ubHkgb2NjdXIgb24gdGhlIENGR19TUERfQlVTX05VTSBidXMuICBTbyBpZgorICogQ0ZHX0VFUFJPTV9CVVNfTlVNICE9IENGR19TUERfQlVTX05VTSwgdGhlbiB3ZSBjYW4ndCByZWFkIHRoZSBFRVBST00gd2hlbgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICBPaCB3ZWxsLgorICovCit1bnNpZ25lZCBpbnQgZ2V0X2NwdV9ib2FyZF9yZXZpc2lvbih2b2lkKQoreworCXN0cnVjdCBib2FyZF9lZXByb20geworCQl1MzIgaWQ7ICAgICAgICAgICAvKiAweDAwIC0gMHgwMyBFRVBST00gVGFnICdDQ0lEJyAqLworCQl1OCBtYWpvcjsgICAgICAgICAvKiAweDA0ICAgICAgICBCb2FyZCByZXZpc2lvbiwgbWFqb3IgKi8KKwkJdTggbWlub3I7ICAgICAgICAgLyogMHgwNSAgICAgICAgQm9hcmQgcmV2aXNpb24sIG1pbm9yICovCisJfSBiZTsKKworCWkyY19yZWFkKENGR19JMkNfRUVQUk9NX0FERFIsIDAsIENGR19JMkNfRUVQUk9NX0FERFJfTEVOLAorCQkodm9pZCAqKSZiZSwgc2l6ZW9mKGJlKSk7CisKKwlpZiAoYmUuaWQgIT0gKCgnQycgPDwgMjQpIHwgKCdDJyA8PCAxNikgfCAoJ0knIDw8IDgpIHwgJ0QnKSkKKwkJcmV0dXJuIE1QQzg1WFhfQ1BVX0JPQVJEX1JFVigwLCAwKTsKKworCWlmICgoYmUubWFqb3IgPT0gMHhmZikgJiYgKGJlLm1pbm9yID09IDB4ZmYpKQorCQlyZXR1cm4gTVBDODVYWF9DUFVfQk9BUkRfUkVWKDAsIDApOworCisJcmV0dXJuIE1QQzg1WFhfQ1BVX0JPQVJEX1JFVihlLm1ham9yLCBlLm1pbm9yKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL201MjM1ZXZiL201MjM1ZXZiLmMgYi9ib2FyZC9mcmVlc2NhbGUvbTUyMzVldmIvbTUyMzVldmIuYwppbmRleCBjMmM4ZmU4Li5iZDhhNGU1IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbTUyMzVldmIvbTUyMzVldmIuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbTUyMzVldmIvbTUyMzVldmIuYwpAQCAtNzUsOSArNzUsMTEgQEAKIAkJc2RyYW0tPmRhY3IwID0KIAkJICAgIFNEUkFNQ19EQVJDbl9CQShDRkdfU0RSQU1fQkFTRSkgfCBTRFJBTUNfREFSQ25fQ0FTTF9DMSB8CiAJCSAgICBTRFJBTUNfREFSQ25fQ0JNX0NNRDIwIHwgU0RSQU1DX0RBUkNuX1BTXzMyOworCQlhc20oIm5vcCIpOwogCiAJCS8qIEluaXRpYWxpemUgRE1SMCAqLwogCQlzZHJhbS0+ZG1yMCA9ICgoZHJhbXNpemUgLSAxKSAmIDB4RkZGQzAwMDApIHwgU0RSQU1DX0RNUm5fVjsKKwkJYXNtKCJub3AiKTsKIAogCQkvKiBTZXQgSVAgKGJpdCAzKSBpbiBEQUNSICovCiAJCXNkcmFtLT5kYWNyMCB8PSBTRFJBTUNfREFSQ25fSVA7CkBAIC0xMDAsNiArMTAyLDcgQEAKIAogCQkvKiBGaW5pc2ggdGhlIGNvbmZpZ3VyYXRpb24gYnkgaXNzdWluZyB0aGUgTVJTLiAqLwogCQlzZHJhbS0+ZGFjcjAgfD0gU0RSQU1DX0RBUkNuX0lNUlM7CisJCWFzbSgibm9wIik7CiAKIAkJLyogV3JpdGUgdG8gdGhlIFNEUkFNIE1vZGUgUmVnaXN0ZXIgKi8KIAkJKih1MzIgKikgKENGR19TRFJBTV9CQVNFICsgMHg0MDApID0gMHhBNUE1OTY5NjsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tNTI3NWV2Yi9NYWtlZmlsZSBiL2JvYXJkL2ZyZWVzY2FsZS9tNTI3NWV2Yi9NYWtlZmlsZQppbmRleCBlZjBiMTllLi5mMzM3YTc1IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbTUyNzVldmIvTWFrZWZpbGUKKysrIGIvYm9hcmQvZnJlZXNjYWxlL201Mjc1ZXZiL01ha2VmaWxlCkBAIC0zMSw3ICszMSw3IEBACiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKIFNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM3NDQ4aHBjMi90c2kxMDhfaW5pdC5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzc0NDhocGMyL3RzaTEwOF9pbml0LmMKaW5kZXggZWZhOTUyYy4uYWQ4MDY5NCAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzc0NDhocGMyL3RzaTEwOF9pbml0LmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzc0NDhocGMyL3RzaTEwOF9pbml0LmMKQEAgLTE2NSw4ICsxNjUsOCBAQAogCQlwcmludGYgKCJJbnZhbGlkIEREUjIgY2xvY2sgc2V0dGluZ1xuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JcHJpbnRmICgiQlVTOiAlZCBNSHpcbiIsIGdldF9ib2FyZF9idXNfY2xrKCkgLyAxMDAwMDAwKTsKLQlwcmludGYgKCJNRU06ICVkIE1IelxuIiwgZ2QtPm1lbV9jbGsgLyAxMDAwMDAwKTsKKwlwcmludGYgKCJCVVM6ICVsdSBNSHpcbiIsIGdldF9ib2FyZF9idXNfY2xrKCkgLyAxMDAwMDAwKTsKKwlwcmludGYgKCJNRU06ICVsdSBNSHpcbiIsIGdkLT5tZW1fY2xrIC8gMTAwMDAwMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyMiw4ICs2MjIsOCBAQAogI2lmZGVmIENGR19MMgogCWwyY2FjaGVfZW5hYmxlICgpOwogI2VuZGlmCi0JcHJpbnRmICgiQlVTOiAgICVkIE1IelxuIiwgZ2QtPmJ1c19jbGsgLyAxMDAwMDAwKTsKLQlwcmludGYgKCJNRU06ICAgJWQgTUh6XG4iLCBnZC0+bWVtX2NsayAvIDEwMDAwMDApOworCXByaW50ZiAoIkJVUzogICAlbHUgTUh6XG4iLCBnZC0+YnVzX2NsayAvIDEwMDAwMDApOworCXByaW50ZiAoIk1FTTogICAlbHUgTUh6XG4iLCBnZC0+bWVtX2NsayAvIDEwMDAwMDApOwogCiAJLyoKIAkgKiBBbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBwcmludCB0aGUgY2FjaGUgZGV0YWlscyBpcyBhdmFpYmxhYmxlCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL2xhdy5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9sYXcuYwppbmRleCBhODJkZWRlLi41NGNmMzZiIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL2xhdy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvbGF3LmMKQEAgLTMwLDcgKzMwLDcgQEAKIHN0cnVjdCBsYXdfZW50cnkgbGF3X3RhYmxlW10gPSB7CiAJU0VUX0xBVyhDRkdfUENJMV9NRU1fUEhZUywgTEFXX1NJWkVfNTEyTSwgTEFXX1RSR1RfSUZfUENJKSwKIAlTRVRfTEFXKENGR19QQ0kxX0lPX1BIWVMsIExBV19TSVpFXzY0SywgTEFXX1RSR1RfSUZfUENJKSwKLQlTRVRfTEFXKENGR19MQkNfQ0FDSEVfQkFTRSwgTEFXQVJfU0laRV8yNTZNLCBMQVdfVFJHVF9JRl9MQkMpLAorCVNFVF9MQVcoQ0ZHX0xCQ19OT05DQUNIRV9CQVNFLCBMQVdBUl9TSVpFXzEyOE0sIExBV19UUkdUX0lGX0xCQyksCiAJU0VUX0xBVyhDRkdfUENJRTFfTUVNX1BIWVMsIExBV0FSX1NJWkVfMjU2TSwgTEFXX1RSR1RfSUZfUENJRV8xKSwKIAlTRVRfTEFXKENGR19QQ0lFMV9JT19QSFlTLCBMQVdfU0laRV82NEssIExBV19UUkdUX0lGX1BDSUVfMSksCiAJU0VUX0xBVyhDRkdfUENJRTJfTUVNX1BIWVMsIExBV0FSX1NJWkVfNTEyTSwgTEFXX1RSR1RfSUZfUENJRV8yKSwKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvbXBjODU0NGRzLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL21wYzg1NDRkcy5jCmluZGV4IGY2MTViMjMuLmMzOWNlMTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvbXBjODU0NGRzLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9tcGM4NTQ0ZHMuYwpAQCAtNDcsOSArNDcsMTIgQEAKIAl2b2xhdGlsZSBjY3NyX2xvY2FsX2VjbV90ICplY20gPSAodm9pZCAqKShDRkdfTVBDODV4eF9FQ01fQUREUik7CiAKIAlpZiAoKHVpbnQpJmd1ci0+cG9ycGxsc3IgIT0gMHhlMDBlMDAwMCkgewotCQlwcmludGYoImltbWFwIHNpemUgZXJyb3IgJXhcbiIsJmd1ci0+cG9ycGxsc3IpOworCQlwcmludGYoImltbWFwIHNpemUgZXJyb3IgJWx4XG4iLCh1bG9uZykmZ3VyLT5wb3JwbGxzcik7CiAJfQotCXByaW50ZiAoIkJvYXJkOiBNUEM4NTQ0RFNcbiIpOworCXByaW50ZiAoIkJvYXJkOiBNUEM4NTQ0RFMsIFN5c3RlbSBJRDogMHglMDJ4LCAiCisJCSJTeXN0ZW0gVmVyc2lvbjogMHglMDJ4LCBGUEdBIFZlcnNpb246IDB4JTAyeFxuIiwKKwkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19JRCksIGluOChQSVhJU19CQVNFICsgUElYSVNfVkVSKSwKKwkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19QVkVSKSk7CiAKIAlsYmMtPmx0ZXNyID0gMHhmZmZmZmZmZjsJLyogQ2xlYXIgTEJDIGVycm9yIGludGVycnVwdHMgKi8KIAlsYmMtPmx0ZWlyID0gMHhmZmZmZmZmZjsJLyogRW5hYmxlIExCQyBlcnJvciBpbnRlcnJ1cHRzICovCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL3RsYi5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy90bGIuYwppbmRleCA2MWZjNjA5Li40MGUwNDk5IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL3RsYi5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvdGxiLmMKQEAgLTc5LDIxICs3OSwxMyBAQAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKIAkJICAgICAgMCwgNCwgQk9PS0VfUEFHRVNaXzY0TSwgMSksCiAKLSNpZmRlZiBDRkdfTEJDX0NBQ0hFX0JBU0UKIAkvKgotCSAqIFRMQiA1Ogk2NE0JQ2FjaGVhYmxlLCBub24tZ3VhcmRlZAotCSAqLwotCVNFVF9UTEJfRU5UUlkoMSwgQ0ZHX0xCQ19DQUNIRV9CQVNFLCBDRkdfTEJDX0NBQ0hFX0JBU0UsCi0JCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCAwLAotCQkgICAgICAwLCA1LCBCT09LRV9QQUdFU1pfNjRNLCAxKSwKLSNlbmRpZgotCS8qCi0JICogVExCIDY6CTY0TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogVExCIDU6CTY0TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCiAJICogMHhmODAwMDAwMAk2NE0JUElYSVMgMHhGODAwMDAwMCAtIDB4RkJGRkZGRkYKIAkgKi8KIAlTRVRfVExCX0VOVFJZKDEsIENGR19MQkNfTk9OQ0FDSEVfQkFTRSwgQ0ZHX0xCQ19OT05DQUNIRV9CQVNFLAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKLQkJICAgICAgMCwgNiwgQk9PS0VfUEFHRVNaXzY0TSwgMSksCisJCSAgICAgIDAsIDUsIEJPT0tFX1BBR0VTWl82NE0sIDEpLAogfTsKIAogaW50IG51bV90bGJfZW50cmllcyA9IEFSUkFZX1NJWkUodGxiX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvdS1ib290LmxkcyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvdS1ib290LmxkcwppbmRleCA3ODVhMDA2Li5jNjZjNjlmIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy91LWJvb3QubGRzCkBAIC03MSw2ICs3MSw3IEBACiAgICAgbGliX2dlbmVyaWMvY3JjMzIubyAoLnRleHQpCiAgICAgbGliX3BwYy9leHRhYmxlLm8gKC50ZXh0KQogICAgIGxpYl9nZW5lcmljL3psaWIubyAoLnRleHQpCisgICAgZHJpdmVycy9iaW9zX2VtdWxhdG9yL2F0aWJpb3MubyAoLnRleHQpCiAgICAgKigudGV4dCkKICAgICAqKC5maXh1cCkKICAgICAqKC5nb3QxKQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg2MTBocGNkL21wYzg2MTBocGNkLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODYxMGhwY2QvbXBjODYxMGhwY2QuYwppbmRleCBjODVmMzczLi5mZjFiODkyIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbXBjODYxMGhwY2QvbXBjODYxMGhwY2QuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODYxMGhwY2QvbXBjODYxMGhwY2QuYwpAQCAtOTksNyArOTksMTAgQEAKIAl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY2Nzcl9sb2NhbF9tY21fdCAqbWNtID0gJmltbWFwLT5pbV9sb2NhbF9tY207CiAKLQlwdXRzKCJCb2FyZDogTVBDODYxMEhQQ0RcbiIpOworCXByaW50ZiAoIkJvYXJkOiBNUEM4NjEwSFBDRCwgU3lzdGVtIElEOiAweCUwMngsICIKKwkJIlN5c3RlbSBWZXJzaW9uOiAweCUwMngsIEZQR0EgVmVyc2lvbjogMHglMDJ4XG4iLAorCQlpbjgoUElYSVNfQkFTRSArIFBJWElTX0lEKSwgaW44KFBJWElTX0JBU0UgKyBQSVhJU19WRVIpLAorCQlpbjgoUElYSVNfQkFTRSArIFBJWElTX1BWRVIpKTsKIAogCW1jbS0+YWJjciB8PSAweDAwMDEwMDAwOyAvKiAwICovCiAJbWNtLT5ocG1yMyA9IDB4ODAwMDAwMDg7IC8qIDRjICovCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODY0MWhwY24vbXBjODY0MWhwY24uYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NjQxaHBjbi9tcGM4NjQxaHBjbi5jCmluZGV4IGNmNTQwZmMuLmRiNDY5NTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NjQxaHBjbi9tcGM4NjQxaHBjbi5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NjQxaHBjbi9tcGM4NjQxaHBjbi5jCkBAIC00Nyw4ICs0NywxMCBAQAogCiBpbnQgY2hlY2tib2FyZCh2b2lkKQogewotCXB1dHMoIkJvYXJkOiBNUEM4NjQxSFBDTlxuIik7Ci0KKwlwcmludGYgKCJCb2FyZDogTVBDODY0MUhQQ04sIFN5c3RlbSBJRDogMHglMDJ4LCAiCisJCSJTeXN0ZW0gVmVyc2lvbjogMHglMDJ4LCBGUEdBIFZlcnNpb246IDB4JTAyeFxuIiwKKwkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19JRCksIGluOChQSVhJU19CQVNFICsgUElYSVNfVkVSKSwKKwkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19QVkVSKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2ludGVncmF0b3JjcC9mbGFzaC5jIGIvYm9hcmQvaW50ZWdyYXRvcmNwL2ZsYXNoLmMKaW5kZXggYjY1M2MwNS4uNTk5NjFjZCAxMDA2NDQKLS0tIGEvYm9hcmQvaW50ZWdyYXRvcmNwL2ZsYXNoLmMKKysrIGIvYm9hcmQvaW50ZWdyYXRvcmNwL2ZsYXNoLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogCQkJCQkJKmFkZHIgPSAoRlBXKSAweDAwRDAwMEQwOwogCQkJCQl9IGVsc2UgewogI2lmZGVmIERFQlVHCi0JCQkJCQlwcmludGYgKCJUaW1lb3V0LDB4JTA4eFxuIiwgc3RhdHVzKTsKKwkJCQkJCXByaW50ZiAoIlRpbWVvdXQsMHglMDhseFxuIiwgc3RhdHVzKTsKICNlbHNlCiAJCQkJCQlwcmludGYoIlRpbWVvdXRcbiIpOwogI2VuZGlmCkBAIC01MTUsNyArNTE1LDcgQEAKIAogCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwogCWlmICgoKmFkZHIgJiBkYXRhKSAhPSBkYXRhKSB7Ci0JCXByaW50ZiAoIm5vdCBlcmFzZWQgYXQgJTA4bHggKCV4KVxuIiwgKHVsb25nKSBhZGRyLCAqYWRkcik7CisJCXByaW50ZiAoIm5vdCBlcmFzZWQgYXQgJTA4bHggKCVseClcbiIsICh1bG9uZykgYWRkciwgKmFkZHIpOwogCQlyZXR1cm4gKDIpOwogCX0KIApAQCAtNTQyLDcgKzU0Miw3IEBACiAjaWZkZWYgREVCVUcKIAkJCSphZGRyID0gKEZQVykgMHgwMDcwMDA3MDsKIAkJCXN0YXR1cyA9ICphZGRyOwotCQkJcHJpbnRmKCIjIyBzdGF0dXM9MHglMDh4LCBhZGRyPTB4JTA4eFxuIiwgc3RhdHVzLCBhZGRyKTsKKwkJCXByaW50ZigiIyMgc3RhdHVzPTB4JTA4bHgsIGFkZHI9MHglcFxuIiwgc3RhdHVzLCBhZGRyKTsKICNlbmRpZgogCQkJKmFkZHIgPSAoRlBXKSAweDAwNTAwMDUwOyAvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgY21kICovCiAJCQkqYWRkciA9IChGUFcpIDB4MDBGRjAwRkY7IC8qIHJlc3RvcmUgcmVhZCBtb2RlICovCmRpZmYgLS1naXQgYS9ib2FyZC9tYXRyaXhfdmlzaW9uL212YmNfcC9NYWtlZmlsZSBiL2JvYXJkL21hdHJpeF92aXNpb24vbXZiY19wL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzJmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tYXRyaXhfdmlzaW9uL212YmNfcC9NYWtlZmlsZQpAQCAtMCwwICsxLDUwIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMworIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyAoQykgQ29weXJpZ2h0IDIwMDQtMjAwOAorIyBNYXRyaXgtVmlzaW9uIEdtYkgsIGluZm9AbWF0cml4LXZpc2lvbi5kZQorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSAkKEJPQVJEKS5vIGZwZ2EubworCitTUkNTICAgIDo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTICAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTICAgOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6ICQob2JqKS5kZXBlbmQgJChPQkpTKQorCSAgICAgICAgJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZApkaWZmIC0tZ2l0IGEvYm9hcmQvbWF0cml4X3Zpc2lvbi9tdmJjX3AvY29uZmlnLm1rIGIvYm9hcmQvbWF0cml4X3Zpc2lvbi9tdmJjX3AvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYzA5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tYXRyaXhfdmlzaW9uL212YmNfcC9jb25maWcubWsKQEAgLTAsMCArMSwzMCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworc2luY2x1ZGUgJChPQkpUUkVFKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCisKK2lmbmRlZiBURVhUX0JBU0UKK1RFWFRfQkFTRSA9IDB4RkY4MDAwMDAKK2VuZGlmCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EVEVYVF9CQVNFPSQoVEVYVF9CQVNFKSAtSSQoVE9QRElSKS9ib2FyZApkaWZmIC0tZ2l0IGEvYm9hcmQvbWF0cml4X3Zpc2lvbi9tdmJjX3AvZnBnYS5jIGIvYm9hcmQvbWF0cml4X3Zpc2lvbi9tdmJjX3AvZnBnYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NmFmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tYXRyaXhfdmlzaW9uL212YmNfcC9mcGdhLmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFJpY2ggSXJlbGFuZCwgRW50ZXJhc3lzIE5ldHdvcmtzLCByaXJlbGFuZEBlbnRlcmFzeXMuY29tLgorICogS2VpdGggT3V0d2F0ZXIsIGtlaXRoX291dHdhdGVyQG12aXMuY29tLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogQW5kcmUgU2Nod2FyeiwgTWF0cml4IFZpc2lvbiBHbWJILCBhbmRyZS5zY2h3YXJ6QG1hdHJpeC12aXNpb24uZGUKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8QUNFWDFLLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgImZwZ2EuaCIKKyNpbmNsdWRlICJtdmJjX3AuaCIKKworI2lmZGVmIEZQR0FfREVCVUcKKyNkZWZpbmUgZnBnYV9kZWJ1ZyhmbXQsIGFyZ3MuLi4pCXByaW50ZigiJXM6ICJmbXQsIF9fZnVuY19fLCAjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBmcGdhX2RlYnVnKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCitBbHRlcmFfQ1lDMl9QYXNzaXZlX1NlcmlhbF9mbnMgYWx0ZXJhX2ZucyA9IHsKKwlmcGdhX251bGxfZm4sCisJZnBnYV9jb25maWdfZm4sCisJZnBnYV9zdGF0dXNfZm4sCisJZnBnYV9kb25lX2ZuLAorCWZwZ2Ffd3JfZm4sCisJZnBnYV9udWxsX2ZuLAorCWZwZ2FfbnVsbF9mbiwKKwkwCit9OworCitBbHRlcmFfZGVzYyBjeWNsb25lMiA9IHsKKwlBbHRlcmFfQ1lDMiwKKwlwYXNzaXZlX3NlcmlhbCwKKwlBbHRlcmFfRVAyQzhfU0laRSwKKwkodm9pZCAqKSAmYWx0ZXJhX2ZucywKKwlOVUxMLAorCTAKK307CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitpbnQgbXZiY19wX2luaXRfZnBnYSh2b2lkKQoreworCWZwZ2FfZGVidWcoIkluaXRpYWxpemUgRlBHQSBpbnRlcmZhY2UgKHJlbG9jIDB4JS44bHgpXG4iLAorCQlnZC0+cmVsb2Nfb2ZmKTsKKwlmcGdhX2luaXQoZ2QtPnJlbG9jX29mZik7CisJZnBnYV9hZGQoZnBnYV9hbHRlcmEsICZjeWNsb25lMik7CisJZnBnYV9jb25maWdfZm4oMCwgMSwgMCk7CisJdWRlbGF5KDYwKTsKKworCXJldHVybiAxOworfQorCitpbnQgZnBnYV9udWxsX2ZuKGludCBjb29raWUpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBmcGdhX2NvbmZpZ19mbihpbnQgYXNzZXJ0LCBpbnQgZmx1c2gsIGludCBjb29raWUpCit7CisJc3RydWN0IG1wYzV4eHhfZ3BpbyAqZ3BpbyA9IChzdHJ1Y3QgbXBjNXh4eF9ncGlvKilNUEM1WFhYX0dQSU87CisJdTMyIGR2byA9IGdwaW8tPnNpbXBsZV9kdm87CisKKwlmcGdhX2RlYnVnKCJTRVQgY29uZmlnIDogJXNcbiIsIGFzc2VydCA/ICJsb3ciIDogImhpZ2giKTsKKwlpZiAoYXNzZXJ0KQorCQlkdm8gfD0gRlBHQV9DT05GSUc7CisJZWxzZQorCQlkdm8gJj0gfkZQR0FfQ09ORklHOworCisJaWYgKGZsdXNoKQorCQlncGlvLT5zaW1wbGVfZHZvID0gZHZvOworCisJcmV0dXJuIGFzc2VydDsKK30KKworaW50IGZwZ2FfZG9uZV9mbihpbnQgY29va2llKQoreworCXN0cnVjdCBtcGM1eHh4X2dwaW8gKmdwaW8gPSAoc3RydWN0IG1wYzV4eHhfZ3BpbyopTVBDNVhYWF9HUElPOworCWludCByZXN1bHQgPSAwOworCisJdWRlbGF5KDEwKTsKKwlmcGdhX2RlYnVnKCJDT05GX0RPTkUgY2hlY2sgLi4uICIpOworCWlmIChncGlvLT5zaW1wbGVfaXZhbCAmIEZQR0FfQ09ORl9ET05FKSB7CisJCWZwZ2FfZGVidWcoImhpZ2hcbiIpOworCQlyZXN1bHQgPSAxOworCX0gZWxzZQorCQlmcGdhX2RlYnVnKCJsb3dcbiIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGZwZ2Ffc3RhdHVzX2ZuKGludCBjb29raWUpCit7CisJc3RydWN0IG1wYzV4eHhfZ3BpbyAqZ3BpbyA9IChzdHJ1Y3QgbXBjNXh4eF9ncGlvKilNUEM1WFhYX0dQSU87CisJaW50IHJlc3VsdCA9IDA7CisKKwlmcGdhX2RlYnVnKCJTVEFUVVMgY2hlY2sgLi4uICIpOworCWlmIChncGlvLT5zaW50X2l2YWwgJiBGUEdBX1NUQVRVUykgeworCQlmcGdhX2RlYnVnKCJoaWdoXG4iKTsKKwkJcmVzdWx0ID0gMTsKKwl9IGVsc2UKKwkJZnBnYV9kZWJ1ZygibG93XG4iKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBmcGdhX2Nsa19mbihpbnQgYXNzZXJ0X2NsaywgaW50IGZsdXNoLCBpbnQgY29va2llKQoreworCXN0cnVjdCBtcGM1eHh4X2dwaW8gKmdwaW8gPSAoc3RydWN0IG1wYzV4eHhfZ3BpbyopTVBDNVhYWF9HUElPOworCXUzMiBkdm8gPSBncGlvLT5zaW1wbGVfZHZvOworCisJZnBnYV9kZWJ1ZygiQ0xPQ0sgJXNcbiIsIGFzc2VydF9jbGsgPyAiaGlnaCIgOiAibG93Iik7CisJaWYgKGFzc2VydF9jbGspCisJCWR2byB8PSBGUEdBX0NDTEs7CisJZWxzZQorCQlkdm8gJj0gfkZQR0FfQ0NMSzsKKworCWlmIChmbHVzaCkKKwkJZ3Bpby0+c2ltcGxlX2R2byA9IGR2bzsKKworCXJldHVybiBhc3NlcnRfY2xrOworfQorCitzdGF0aWMgaW5saW5lIGludCBfd3JpdGVfZnBnYSh1OCB2YWwpCit7CisJaW50IGk7CisJc3RydWN0IG1wYzV4eHhfZ3BpbyAqZ3BpbyA9IChzdHJ1Y3QgbXBjNXh4eF9ncGlvKilNUEM1WFhYX0dQSU87CisJdTMyIGR2byA9IGdwaW8tPnNpbXBsZV9kdm87CisKKwlmb3IgKGk9MDsgaTw4OyBpKyspIHsKKwkJZHZvICY9IH5GUEdBX0NDTEs7CisJCWdwaW8tPnNpbXBsZV9kdm8gPSBkdm87CisJCWR2byAmPSB+RlBHQV9ESU47CisJCWlmICh2YWwgJiAxKQorCQkJZHZvIHw9IEZQR0FfRElOOworCQlncGlvLT5zaW1wbGVfZHZvID0gZHZvOworCQlkdm8gfD0gRlBHQV9DQ0xLOworCQlncGlvLT5zaW1wbGVfZHZvID0gZHZvOworCQl2YWwgPj49IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBmcGdhX3dyX2ZuKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsdXNoLCBpbnQgY29va2llKQoreworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBidWY7CisJaW50IGk7CisKKwlmcGdhX2RlYnVnKCJmcGdhX3dyOiBidWYgJXAgLyBzaXplICVkXG4iLCBidWYsIGxlbik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlfd3JpdGVfZnBnYShkYXRhW2ldKTsKKwlmcGdhX2RlYnVnKCJcbiIpOworCisJcmV0dXJuIEZQR0FfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21hdHJpeF92aXNpb24vbXZiY19wL2ZwZ2EuaCBiL2JvYXJkL21hdHJpeF92aXNpb24vbXZiY19wL2ZwZ2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzIzMDczCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWF0cml4X3Zpc2lvbi9tdmJjX3AvZnBnYS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFJpY2ggSXJlbGFuZCwgRW50ZXJhc3lzIE5ldHdvcmtzLCByaXJlbGFuZEBlbnRlcmFzeXMuY29tLgorICogS2VpdGggT3V0d2F0ZXIsIGtlaXRoX291dHdhdGVyQG12aXMuY29tLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCitleHRlcm4gaW50IG12YmNfcF9pbml0X2ZwZ2Eodm9pZCk7CisKK2V4dGVybiBpbnQgZnBnYV9wZ21fZm4oaW50IGFzc2VydF9wZ20sIGludCBmbHVzaCwgaW50IGNvb2tpZSk7CitleHRlcm4gaW50IGZwZ2Ffc3RhdHVzX2ZuKGludCBjb29raWUpOworZXh0ZXJuIGludCBmcGdhX2NvbmZpZ19mbihpbnQgYXNzZXJ0LCBpbnQgZmx1c2gsIGludCBjb29raWUpOworZXh0ZXJuIGludCBmcGdhX2RvbmVfZm4oaW50IGNvb2tpZSk7CitleHRlcm4gaW50IGZwZ2FfY2xrX2ZuKGludCBhc3NlcnRfY2xrLCBpbnQgZmx1c2gsIGludCBjb29raWUpOworZXh0ZXJuIGludCBmcGdhX3dyX2ZuKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsdXNoLCBpbnQgY29va2llKTsKK2V4dGVybiBpbnQgZnBnYV9udWxsX2ZuKGludCBjb29raWUpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWF0cml4X3Zpc2lvbi9tdmJjX3AvbXZiY19wLmMgYi9ib2FyZC9tYXRyaXhfdmlzaW9uL212YmNfcC9tdmJjX3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjFlODRlCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWF0cml4X3Zpc2lvbi9tdmJjX3AvbXZiY19wLmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBNYXJrIEpvbmFzLCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgbWFyay5qb25hc0Btb3Rvcm9sYS5jb20uCisgKgorICogKEMpIENvcHlyaWdodCAyMDA1LTIwMDcKKyAqIEFuZHJlIFNjaHdhcnosIE1hdHJpeCBWaXNpb24gR21iSCwgYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bXBjNXh4eC5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPGkyYy5oPgorI2luY2x1ZGUgPGVudmlyb25tZW50Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlICJmcGdhLmgiCisjaW5jbHVkZSAibXZiY19wLmgiCisKKyNkZWZpbmUgU0RSQU1fTU9ERQkweDAwQ0QwMDAwCisjZGVmaW5lIFNEUkFNX0NPTlRST0wJMHg1MDRGMDAwMAorI2RlZmluZSBTRFJBTV9DT05GSUcxCTB4RDIzMjI4MDAKKyNkZWZpbmUgU0RSQU1fQ09ORklHMgkweDhBRDcwMDAwCisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitzdGF0aWMgdm9pZCBzZHJhbV9zdGFydCAoaW50IGhpX2FkZHIpCit7CisJbG9uZyBoaV9iaXQgPSBoaV9hZGRyID8gMHgwMTAwMDAwMCA6IDA7CisKKwkvKiB1bmxvY2sgbW9kZSByZWdpc3RlciAqLworCW91dF9iZTMyKCh1MzIqKU1QQzVYWFhfU0RSQU1fQ1RSTCwgU0RSQU1fQ09OVFJPTCB8IDB4ODAwMDAwMDAgfCBoaV9iaXQpOworCisJLyogcHJlY2hhcmdlIGFsbCBiYW5rcyAqLworCW91dF9iZTMyKCh1MzIqKU1QQzVYWFhfU0RSQU1fQ1RSTCwgU0RSQU1fQ09OVFJPTCB8IDB4ODAwMDAwMDIgfCBoaV9iaXQpOworCisJLyogcHJlY2hhcmdlIGFsbCBiYW5rcyAqLworCW91dF9iZTMyKCh1MzIqKU1QQzVYWFhfU0RSQU1fQ1RSTCwgU0RSQU1fQ09OVFJPTCB8IDB4ODAwMDAwMDIgfCBoaV9iaXQpOworCisJLyogYXV0byByZWZyZXNoICovCisJb3V0X2JlMzIoKHUzMiopTVBDNVhYWF9TRFJBTV9DVFJMLCBTRFJBTV9DT05UUk9MIHwgMHg4MDAwMDAwNCB8IGhpX2JpdCk7CisKKwkvKiBzZXQgbW9kZSByZWdpc3RlciAqLworCW91dF9iZTMyKCh1MzIqKU1QQzVYWFhfU0RSQU1fTU9ERSwgU0RSQU1fTU9ERSk7CisKKwkvKiBub3JtYWwgb3BlcmF0aW9uICovCisJb3V0X2JlMzIoKHUzMiopTVBDNVhYWF9TRFJBTV9DVFJMLCBTRFJBTV9DT05UUk9MIHwgaGlfYml0KTsKK30KKworcGh5c19hZGRyX3QgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQoreworCXVsb25nIGRyYW1zaXplID0gMDsKKwl1bG9uZyB0ZXN0MSwKKwkgICAgICB0ZXN0MjsKKworCS8qIHNldHVwIFNEUkFNIGNoaXAgc2VsZWN0cyAqLworCW91dF9iZTMyKCh1MzIqKU1QQzVYWFhfU0RSQU1fQ1MwQ0ZHLCAweDAwMDAwMDFlKTsKKworCS8qIHNldHVwIGNvbmZpZyByZWdpc3RlcnMgKi8KKwlvdXRfYmUzMigodTMyKilNUEM1WFhYX1NEUkFNX0NPTkZJRzEsIFNEUkFNX0NPTkZJRzEpOworCW91dF9iZTMyKCh1MzIqKU1QQzVYWFhfU0RSQU1fQ09ORklHMiwgU0RSQU1fQ09ORklHMik7CisKKwkvKiBmaW5kIFJBTSBzaXplIHVzaW5nIFNEUkFNIENTMCBvbmx5ICovCisJc2RyYW1fc3RhcnQoMCk7CisJdGVzdDEgPSBnZXRfcmFtX3NpemUoKGxvbmcgKilDRkdfU0RSQU1fQkFTRSwgMHg4MDAwMDAwMCk7CisJc2RyYW1fc3RhcnQoMSk7CisJdGVzdDIgPSBnZXRfcmFtX3NpemUoKGxvbmcgKilDRkdfU0RSQU1fQkFTRSwgMHg4MDAwMDAwMCk7CisJaWYgKHRlc3QxID4gdGVzdDIpIHsKKwkJc2RyYW1fc3RhcnQoMCk7CisJCWRyYW1zaXplID0gdGVzdDE7CisJfSBlbHNlCisJCWRyYW1zaXplID0gdGVzdDI7CisKKwlpZiAoZHJhbXNpemUgPCAoMSA8PCAyMCkpCisJCWRyYW1zaXplID0gMDsKKworCWlmIChkcmFtc2l6ZSA+IDApCisJCW91dF9iZTMyKCh1MzIqKU1QQzVYWFhfU0RSQU1fQ1MwQ0ZHLCAweDEzICsKKwkJCV9fYnVpbHRpbl9mZnMoZHJhbXNpemUgPj4gMjApIC0gMSk7CisJZWxzZQorCQlvdXRfYmUzMigodTMyKilNUEM1WFhYX1NEUkFNX0NTMENGRywgMCk7CisKKwlyZXR1cm4gZHJhbXNpemU7Cit9CisKK3ZvaWQgbXZiY19pbml0X2dwaW8odm9pZCkKK3sKKwlzdHJ1Y3QgbXBjNXh4eF9ncGlvICpncGlvID0gKHN0cnVjdCBtcGM1eHh4X2dwaW8qKU1QQzVYWFhfR1BJTzsKKworCXByaW50ZigiUG9ydHMgOiAweCUwOHhcbiIsIGdwaW8tPnBvcnRfY29uZmlnKTsKKwlwcmludGYoIlBPUkNGRzogMHglMDh4XG4iLCAqKHZ1X2xvbmcqKU1QQzVYWFhfQ0RNX1BPUkNGRyk7CisKKwlvdXRfYmUzMigmZ3Bpby0+c2ltcGxlX2RkciwgU0lNUExFX0REUik7CisJb3V0X2JlMzIoJmdwaW8tPnNpbXBsZV9kdm8sIFNJTVBMRV9EVk8pOworCW91dF9iZTMyKCZncGlvLT5zaW1wbGVfb2RlLCBTSU1QTEVfT0RFKTsKKwlvdXRfYmUzMigmZ3Bpby0+c2ltcGxlX2dwaW9lLCBTSU1QTEVfR1BJT0VOKTsKKworCW91dF9iZTMyKCh1MzIqKSZncGlvLT5zaW50X29kZSwgU0lOVF9PREUpOworCW91dF9iZTMyKCh1MzIqKSZncGlvLT5zaW50X2RkciwgU0lOVF9ERFIpOworCW91dF9iZTMyKCh1MzIqKSZncGlvLT5zaW50X2R2bywgU0lOVF9EVk8pOworCW91dF9iZTMyKCh1MzIqKSZncGlvLT5zaW50X2ludGVuLCBTSU5UX0lOVEVOKTsKKwlvdXRfYmUzMigodTMyKikmZ3Bpby0+c2ludF9pdHlwZSwgU0lOVF9JVFlQRSk7CisJb3V0X2JlMzIoKHUzMiopJmdwaW8tPnNpbnRfZ3Bpb2UsIFNJTlRfR1BJT0VOKTsKKworCW91dF84KCh1OCopTVBDNVhYWF9XVV9HUElPX09ERSwgV0tVUF9PREUpOworCW91dF84KCh1OCopTVBDNVhYWF9XVV9HUElPX0RJUiwgV0tVUF9ESVIpOworCW91dF84KCh1OCopTVBDNVhYWF9XVV9HUElPX0RBVEFfTywgV0tVUF9ETyk7CisJb3V0XzgoKHU4KilNUEM1WFhYX1dVX0dQSU9fRU5BQkxFLCBXS1VQX0VOKTsKKworCXByaW50Zigic2ltcGxlX2dwaW9lOiAweCUwOHhcbiIsIGdwaW8tPnNpbXBsZV9ncGlvZSk7CisJcHJpbnRmKCJzaW50X2dwaW9lICA6IDB4JTA4eFxuIiwgZ3Bpby0+c2ludF9ncGlvZSk7Cit9CisKK3ZvaWQgcmVzZXRfZW52aXJvbm1lbnQodm9pZCkKK3sKKwljaGFyICpzLCBzZXJucls2NF07CisKKwlwcmludGYoIlxuKioqIFJFU0VUIEVOVklST05NRU5UICoqKlxuIik7CisJbWVtc2V0KHNlcm5yLCAwLCBzaXplb2Yoc2VybnIpKTsKKwlzID0gZ2V0ZW52KCJzZXJpYWwjIik7CisJaWYgKHMpIHsKKwkJcHJpbnRmKCJmb3VuZCBzZXJpYWwjIDogJXNcbiIsIHMpOworCQlzdHJuY3B5KHNlcm5yLCBzLCA2NCk7CisJfQorCWdkLT5lbnZfdmFsaWQgPSAwOworCWVudl9yZWxvY2F0ZSgpOworCWlmIChzKQorCQlzZXRlbnYoInNlcmlhbCMiLCBzZXJucik7Cit9CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCWNoYXIgKnMgPSBnZXRlbnYoInJlc2V0X2VudiIpOworCisJaWYgKCFzKSB7CisJCWlmIChpbl84KCh1OCopTVBDNVhYWF9XVV9HUElPX0RBVEFfSSkgJiBNUEM1WFhYX0dQSU9fV0tVUF82KQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSg1MDAwMCk7CisJCWlmIChpbl84KCh1OCopTVBDNVhYWF9XVV9HUElPX0RBVEFfSSkgJiBNUEM1WFhYX0dQSU9fV0tVUF82KQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSg1MDAwMCk7CisJCWlmIChpbl84KCh1OCopTVBDNVhYWF9XVV9HUElPX0RBVEFfSSkgJiBNUEM1WFhYX0dQSU9fV0tVUF82KQorCQkJcmV0dXJuIDA7CisJfQorCXByaW50ZigiID09PSBGQUNUT1JZIFJFU0VUID09PVxuIik7CisJcmVzZXRfZW52aXJvbm1lbnQoKTsKKwlzYXZlZW52KCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBjaGVja2JvYXJkKHZvaWQpCit7CisJbXZiY19pbml0X2dwaW8oKTsKKwlwcmludGYoIkJvYXJkOiBNYXRyaXggVmlzaW9uIG12Qmx1ZUNPVUdBUi1QXG4iKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGZsYXNoX3ByZWluaXQodm9pZCkKK3sKKwkvKgorCSAqIE5vdywgd2hlbiB3ZSBhcmUgaW4gUkFNLCBlbmFibGUgZmxhc2ggd3JpdGUKKwkgKiBhY2Nlc3MgZm9yIGRldGVjdGlvbiBwcm9jZXNzLgorCSAqIE5vdGUgdGhhdCBDU19CT09UIGNhbm5vdCBiZSBjbGVhcmVkIHdoZW4KKwkgKiBleGVjdXRpbmcgaW4gZmxhc2guCisJICovCisJY2xyYml0c19iZTMyKCh1MzIqKU1QQzVYWFhfQk9PVENTX0NGRywgMHgxKTsKK30KKwordm9pZCBmbGFzaF9hZnRlcmluaXQodWxvbmcgc2l6ZSkKK3sKKwlvdXRfYmUzMigodTMyKilNUEM1WFhYX0JPT1RDU19TVEFSVCwgU1RBUlRfUkVHKENGR19CT09UQ1NfU1RBUlQgfAorCQlzaXplKSk7CisJb3V0X2JlMzIoKHUzMiopTVBDNVhYWF9DUzBfU1RBUlQsIFNUQVJUX1JFRyhDRkdfQk9PVENTX1NUQVJUIHwKKwkJc2l6ZSkpOworCW91dF9iZTMyKCh1MzIqKU1QQzVYWFhfQk9PVENTX1NUT1AsIFNUT1BfUkVHKENGR19CT09UQ1NfU1RBUlQgfCBzaXplLAorCQlzaXplKSk7CisJb3V0X2JlMzIoKHUzMiopTVBDNVhYWF9DUzBfU1RPUCwgU1RPUF9SRUcoQ0ZHX0JPT1RDU19TVEFSVCB8IHNpemUsCisJCXNpemUpKTsKK30KKwordm9pZCBwY2lfbXZiY19maXh1cF9pcnEoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBwY2lfZGV2X3QgZGV2KQoreworCXVuc2lnbmVkIGNoYXIgbGluZSA9IDB4ZmY7CisJdTMyIGJhc2U7CisKKwlpZiAoUENJX0JVUyhkZXYpID09IDApIHsKKwkJc3dpdGNoIChQQ0lfREVWIChkZXYpKSB7CisJCWNhc2UgMHhhOiAvKiBGUEdBICovCisJCQlsaW5lID0gMzsKKwkJCXBjaV9ob3NlX3JlYWRfY29uZmlnX2R3b3JkKGhvc2UsIGRldiwgUENJX0JBU0VfQUREUkVTU18wLCAmYmFzZSk7CisJCQlwcmludGYoImZvdW5kIEZQQSAtIGVuYWJsZSBhcmJpdHJhdGlvblxuIik7CisJCQl3cml0ZWwoMHgwMywgKHUzMiopKGJhc2UgKyAweDgwYzApKTsKKwkJCXdyaXRlbCgweGYwLCAodTMyKikoYmFzZSArIDB4ODA4MCkpOworCQkJYnJlYWs7CisJCWNhc2UgMHhiOiAvKiBMQU4gKi8KKwkJCWxpbmUgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgMHgxYToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRmICgiKioqcGNpX3NjYW46IGlsbGVnYWwgZGV2ID0gMHglMDh4XG4iLCBQQ0lfREVWIChkZXYpKTsKKwkJCWJyZWFrOworCQl9CisJCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBsaW5lKTsKKwl9Cit9CisKK3N0cnVjdCBwY2lfY29udHJvbGxlciBob3NlID0geworCWZpeHVwX2lycTpwY2lfbXZiY19maXh1cF9pcnEKK307CisKK2ludCBtdmJjX3BfbG9hZF9mcGdhKHZvaWQpCit7CisJc2l6ZV90IGRhdGFfc2l6ZSA9IDA7CisJdm9pZCAqZnBnYV9kYXRhID0gTlVMTDsKKwljaGFyICpkYXRhc3RyID0gZ2V0ZW52KCJmcGdhZGF0YSIpOworCWNoYXIgKnNpemVzdHIgPSBnZXRlbnYoImZwZ2FkYXRhc2l6ZSIpOworCisJaWYgKGRhdGFzdHIpCisJCWZwZ2FfZGF0YSA9ICh2b2lkICopc2ltcGxlX3N0cnRvdWwoZGF0YXN0ciwgTlVMTCwgMTYpOworCWlmIChzaXplc3RyKQorCQlkYXRhX3NpemUgPSAoc2l6ZV90KXNpbXBsZV9zdHJ0b3VsKHNpemVzdHIsIE5VTEwsIDE2KTsKKworCXJldHVybiBmcGdhX2xvYWQoMCwgZnBnYV9kYXRhLCBkYXRhX3NpemUpOworfQorCitleHRlcm4gdm9pZCBwY2lfbXBjNXh4eF9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqKTsKKwordm9pZCBwY2lfaW5pdF9ib2FyZCh2b2lkKQoreworCWNoYXIgKnM7CisJaW50IGxvYWRfZnBnYSA9IDE7CisKKwltdmJjX3BfaW5pdF9mcGdhKCk7CisJcyA9IGdldGVudigic2tpcF9mcGdhIik7CisJaWYgKHMpIHsKKwkJcHJpbnRmKCJmb3VuZCAnc2tpcF9mcGdhJyAtPiBGUEdBIF9ub3RfIGxvYWRlZCAhXG4iKTsKKwkJbG9hZF9mcGdhID0gMDsKKwl9CisJaWYgKGxvYWRfZnBnYSkgeworCQlwcmludGYoImxvYWRpbmcgRlBHQSAuLi4gIik7CisJCW12YmNfcF9sb2FkX2ZwZ2EoKTsKKwkJcHJpbnRmKCJkb25lXG4iKTsKKwl9CisJcGNpX21wYzV4eHhfaW5pdCgmaG9zZSk7Cit9CisKK3U4ICpkaGNwX3ZlbmRvcmV4X3ByZXAodTggKmUpCit7CisJY2hhciAqcHRyOworCisJLyogREhDUCB2ZW5kb3ItY2xhc3MtaWRlbnRpZmllciA9IDYwICovCisJaWYgKChwdHIgPSBnZXRlbnYoImRoY3BfdmVuZG9yLWNsYXNzLWlkZW50aWZpZXIiKSkpIHsKKwkJKmUrKyA9IDYwOworCQkqZSsrID0gc3RybGVuKHB0cik7CisJCXdoaWxlICgqcHRyKQorCQkJKmUrKyA9ICpwdHIrKzsKKwl9CisJLyogREhDUF9DTElFTlRfSURFTlRJRklFUiA9IDYxICovCisJaWYgKChwdHIgPSBnZXRlbnYoImRoY3BfY2xpZW50X2lkIikpKSB7CisJCSplKysgPSA2MTsKKwkJKmUrKyA9IHN0cmxlbihwdHIpOworCQl3aGlsZSAoKnB0cikKKwkJCSplKysgPSAqcHRyKys7CisJfQorCisJcmV0dXJuIGU7Cit9CisKK3U4ICpkaGNwX3ZlbmRvcmV4X3Byb2MgKHU4ICpwb3B0KQoreworCXJldHVybiBOVUxMOworfQorCit2b2lkIHNob3dfYm9vdF9wcm9ncmVzcyhpbnQgdmFsKQoreworCXN0cnVjdCBtcGM1eHh4X2dwaW8gKmdwaW8gPSAoc3RydWN0IG1wYzV4eHhfZ3BpbyopTVBDNVhYWF9HUElPOworCisJc3dpdGNoKHZhbCkgeworCWNhc2UgMDogLyogRlBHQSBvayAqLworCQlzZXRiaXRzX2JlMzIoJmdwaW8tPnNpbXBsZV9kdm8sIDB4ODApOworCQlicmVhazsKKwljYXNlIDE6CisJCXNldGJpdHNfYmUzMigmZ3Bpby0+c2ltcGxlX2R2bywgMHg0MCk7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCXNldGJpdHNfYmUzMigmZ3Bpby0+c2ltcGxlX2R2bywgMHgyMCk7CisJCWJyZWFrOworCWNhc2UgMTU6CisJCXNldGJpdHNfYmUzMigmZ3Bpby0+c2ltcGxlX2R2bywgMHgxMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworfQorCit2b2lkIGZ0X2JvYXJkX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7CisJZmR0X2ZpeHVwX21lbW9yeShibG9iLCAodTY0KWJkLT5iaV9tZW1zdGFydCwgKHU2NCliZC0+YmlfbWVtc2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9tYXRyaXhfdmlzaW9uL212YmNfcC9tdmJjX3AuaCBiL2JvYXJkL21hdHJpeF92aXNpb24vbXZiY19wL212YmNfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzA3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tYXRyaXhfdmlzaW9uL212YmNfcC9tdmJjX3AuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIF9fTVZCQ19IX18KKyNkZWZpbmUgX19NVkJDX0hfXworCisjZGVmaW5lIExFRF9HMCAgICAgICAgICBNUEM1WFhYX0dQSU9fU0lNUExFX1BTQzJfMAorI2RlZmluZSBMRURfRzEgICAgICAgICAgTVBDNVhYWF9HUElPX1NJTVBMRV9QU0MyXzEKKyNkZWZpbmUgTEVEX1kgICAgICAgICAgIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDMl8yCisjZGVmaW5lIExFRF9SICAgICAgICAgICBNUEM1WFhYX0dQSU9fU0lNUExFX1BTQzJfMworI2RlZmluZSBBUkJfWF9FTiAgICAgICAgTVBDNVhYWF9HUElPX1dLVVBfUFNDMl80CisKKyNkZWZpbmUgRlBHQV9ESU4gICAgICAgIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDM18wCisjZGVmaW5lIEZQR0FfQ0NMSyAgICAgICBNUEM1WFhYX0dQSU9fU0lNUExFX1BTQzNfMQorI2RlZmluZSBGUEdBX0NPTkZfRE9ORSAgTVBDNVhYWF9HUElPX1NJTVBMRV9QU0MzXzIKKyNkZWZpbmUgRlBHQV9DT05GSUcgICAgIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDM18zCisjZGVmaW5lIEZQR0FfU1RBVFVTICAgICBNUEM1WFhYX0dQSU9fU0lOVF9QU0MzXzQKKworI2RlZmluZSBNQU5fUlNUICAgICAgICAgTVBDNVhYWF9HUElPX1dLVVBfUFNDNl8wCisjZGVmaW5lIFdEX1RTICAgICAgICAgICBNUEM1WFhYX0dQSU9fV0tVUF9QU0M2XzEKKyNkZWZpbmUgV0RfV0RJICAgICAgICAgIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDNl8yCisjZGVmaW5lIENPUF9QUkVTRU5UICAgICBNUEM1WFhYX0dQSU9fU0lNUExFX1BTQzZfMworI2RlZmluZSBGQUNUX1JTVCAgICAgICAgTVBDNVhYWF9HUElPX1dLVVBfNgorI2RlZmluZSBGTEFTSF9SQlkgICAgICAgTVBDNVhYWF9HUElPX1dLVVBfNworCisjZGVmaW5lIFNJTVBMRV9ERFIgICAgICAoTEVEX0cwIHwgTEVEX0cxIHwgTEVEX1kgfCBMRURfUiB8IFwKKwkJCSBGUEdBX0RJTiB8IEZQR0FfQ0NMSyB8IEZQR0FfQ09ORklHIHwgV0RfV0RJKQorI2RlZmluZSBTSU1QTEVfRFZPICAgICAgKEZQR0FfQ09ORklHKQorI2RlZmluZSBTSU1QTEVfT0RFICAgICAgKEZQR0FfQ09ORklHKQorI2RlZmluZSBTSU1QTEVfR1BJT0VOICAgKExFRF9HMCB8IExFRF9HMSB8IExFRF9ZIHwgTEVEX1IgfCBcCisJCQkgRlBHQV9ESU4gfCBGUEdBX0NDTEsgfCBGUEdBX0NPTkZfRE9ORSB8IEZQR0FfQ09ORklHIHxcCisJCQkgV0RfV0RJIHwgQ09QX1BSRVNFTlQpCisKKyNkZWZpbmUgU0lOVF9PREUgICAgICAgIDAKKyNkZWZpbmUgU0lOVF9ERFIgICAgICAgIDAKKyNkZWZpbmUgU0lOVF9EVk8gICAgICAgIDAKKyNkZWZpbmUgU0lOVF9JTlRFTiAgICAgIDAKKyNkZWZpbmUgU0lOVF9JVFlQRSAgICAgIDAKKyNkZWZpbmUgU0lOVF9HUElPRU4gICAgIChGUEdBX1NUQVRVUykKKworI2RlZmluZSBXS1VQX09ERSAgICAgICAgKE1BTl9SU1QpCisjZGVmaW5lIFdLVVBfRElSICAgICAgICAoQVJCX1hfRU58TUFOX1JTVHxXRF9UUykKKyNkZWZpbmUgV0tVUF9ETyAgICAgICAgIChBUkJfWF9FTnxNQU5fUlNUfFdEX1RTKQorI2RlZmluZSBXS1VQX0VOICAgICAgICAgKEFSQl9YX0VOfE1BTl9SU1R8V0RfVFN8RkFDVF9SU1R8RkxBU0hfUkJZKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21hdHJpeF92aXNpb24vbXZiY19wL212YmNfcF9hdXRvc2NyaXB0IGIvYm9hcmQvbWF0cml4X3Zpc2lvbi9tdmJjX3AvbXZiY19wX2F1dG9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlZTZjNQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21hdHJpeF92aXNpb24vbXZiY19wL212YmNfcF9hdXRvc2NyaXB0CkBAIC0wLDAgKzEsNDQgQEAKK2VjaG8KK2VjaG8gIj09PT0gcnVubmluZyBhdXRvc2NyaXB0ID09PT0iCitlY2hvCitzZXRlbnYgYm9vdGR0YiBib290bSBcJHtrZXJuZWxfYm9vdH0gXCR7bXZfaW5pdHJkX2FkZHJfcmFtfSBcJHttdl9kdGJfYWRkcl9yYW19CitzZXRlbnYgcmFta2VybmVsIHNldGVudiBrZXJuZWxfYm9vdCBcJHtsb2FkYWRkcn0KK3NldGVudiBmbGFzaGtlcm5lbCBzZXRlbnYga2VybmVsX2Jvb3QgXCR7bXZfa2VybmVsX2FkZHJ9CitzZXRlbnYgY3BpcmQgY3AgXCR7bXZfaW5pdHJkX2FkZHJ9IFwke212X2luaXRyZF9hZGRyX3JhbX0gXCR7bXZfaW5pdHJkX2xlbmd0aH0KK3NldGVudiBib290ZnJvbWZsYXNoIHJ1biBmbGFzaGtlcm5lbCBjcGlyZCByYW1wYXJhbSBhZGRjb25zIGUxMDAwcGFyYSBib290ZHRiCitzZXRlbnYgZ2V0ZHRiIHRmdHAgXCR7bXZfZHRiX2FkZHJfcmFtfSBcJHtkdGJfbmFtZX0KK3NldGVudiBjcGR0YiBjcCBcJHttdl9kdGJfYWRkcn0gXCR7bXZfZHRiX2FkZHJfcmFtfSAweDIwMDAKK3NldGVudiBydW5kdGIgZmR0IGFkZHIgXCR7bXZfZHRiX2FkZHJfcmFtfVw7ZmR0IGJvYXJkc2V0dXAKK3NldGVudiBib290ZnJvbW5ldCB0ZnRwIFwke212X2luaXRyZF9hZGRyX3JhbX0gXCR7aW5pdHJkX25hbWV9XDtydW4gcmFta2VybmVsCitpZiB0ZXN0ICR7Y29uc29sZX0gPSB5ZXM7Cit0aGVuCitzZXRlbnYgYWRkY29ucyBzZXRlbnYgYm9vdGFyZ3MgXCR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UFNDXCR7Y29uc29sZV9ucn0sXCR7YmF1ZHJhdGV9TjgKK2Vsc2UKK3NldGVudiBhZGRjb25zIHNldGVudiBib290YXJncyBcJHtib290YXJnc30gY29uc29sZT10dHkwCitmaQorc2V0ZW52IGUxMDAwcGFyYSBzZXRlbnYgYm9vdGFyZ3MgXCR7Ym9vdGFyZ3N9IGUxMDAwLlR4RGVzY3JpcHRvcnM9MTUwMCBlMTAwMC5TbWFydFBvd2VyRG93bkVuYWJsZT0xCitzZXRlbnYgc2V0X3N0YXRpY19pcCBzZXRlbnYgaXBhZGRyIFwke3N0YXRpY19pcGFkZHJ9CitzZXRlbnYgc2V0X3N0YXRpY19ubSBzZXRlbnYgbmV0bWFzayBcJHtzdGF0aWNfbmV0bWFza30KK3NldGVudiBzZXRfc3RhdGljX2d3IHNldGVudiBnYXRld2F5aXAgXCR7c3RhdGljX2dhdGV3YXl9CitzZXRlbnYgc2V0X2lwIHNldGVudiBpcCBcJHtpcGFkZHJ9OjpcJHtnYXRld2F5aXB9Olwke25ldG1hc2t9CitzZXRlbnYgcmFtcGFyYW0gc2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0wIHJvIHJvb3Rmc3R5cGU9c3F1YXNoZnMKK2lmIHRlc3QgJHthdXRvc2NyX2Jvb3R9ICE9IG5vOwordGhlbgorICBpZiB0ZXN0ICR7bmV0Ym9vdH0gPSB5ZXM7CisgIHRoZW4KKyAgICBib290cAorICAgIGlmIHRlc3QgJD8gPSAwOworICAgIHRoZW4KKyAgICAgIGVjaG8gIj09PSBib290cCBzdWNjZWVkZWQgLT4gbmV0Ym9vdCA9PT0iCisgICAgICBydW4gc2V0X2lwCisgICAgICBydW4gZ2V0ZHRiIHJ1bmR0YiBib290ZnJvbW5ldCByYW1wYXJhbSBhZGRjb25zIGUxMDAwcGFyYSBib290ZHRiCisgICAgZWxzZQorICAgICAgZWNobyAiPT09IG5ldGJvb3QgZmFpbGVkID09PSIKKyAgICBmaQorICBmaQorICBydW4gc2V0X3N0YXRpY19pcCBzZXRfc3RhdGljX25tIHNldF9zdGF0aWNfZ3cgc2V0X2lwCisgIGVjaG8gIj09PSBib290ZnJvbWZsYXNoID09PSIKKyAgcnVuIGNwZHRiIHJ1bmR0YiBib290ZnJvbWZsYXNoCitlbHNlCisgIGVjaG8gIj09PSBib290IHN0b3BwZWQgd2l0aCBhdXRvc2NyX2Jvb3Qgbm8gPT09IgorZmkKZGlmZiAtLWdpdCBhL2JvYXJkL21jYzIwMC9hdXRvX3VwZGF0ZS5jIGIvYm9hcmQvbWNjMjAwL2F1dG9fdXBkYXRlLmMKaW5kZXggNTU4MGMxMS4uMmVkNjZkZCAxMDA2NDQKLS0tIGEvYm9hcmQvbWNjMjAwL2F1dG9fdXBkYXRlLmMKKysrIGIvYm9hcmQvbWNjMjAwL2F1dG9fdXBkYXRlLmMKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCQkJYXVmaWxlW2ldLCBzeiwgaW1hZ2VfZ2V0X2hlYWRlcl9zaXplICgpKTsKIAogCQlpZiAoc3ogIT0gYXVzaXplW2ldKSB7Ci0JCQlwcmludGYgKCIlczogc2l6ZSAlZCByZWFkICVkP1xuIiwgYXVmaWxlW2ldLCBhdXNpemVbaV0sIHN6KTsKKwkJCXByaW50ZiAoIiVzOiBzaXplICVsZCByZWFkICVsZD9cbiIsIGF1ZmlsZVtpXSwgYXVzaXplW2ldLCBzeik7CiAJCQljb250aW51ZTsKIAkJfQogCmRpZmYgLS1naXQgYS9ib2FyZC9tbDIvZmxhc2guYyBiL2JvYXJkL21sMi9mbGFzaC5jCmluZGV4IDg3Y2IxZmYuLmFkMGYwNzUgMTAwNjQ0Ci0tLSBhL2JvYXJkL21sMi9mbGFzaC5jCisrKyBiL2JvYXJkL21sMi9mbGFzaC5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0OwogCWludCByYyA9IEVSUl9PSzsKIAotCXJlc3VsdD0qYWRkcjsKKwlyZXN1bHQgPSAqYWRkcjsKIAlpZiAoKHJlc3VsdCAmIGRhdGEpICE9IGRhdGEpCiAJCXJldHVybiBFUlJfTk9UX0VSQVNFRDsKIApAQCAtMjM0LDcgKzIzNCw3IEBACiAJZWllaW8oKTsKIAogCWRvIHsKLQkJcmVzdWx0PSphZGRyOworCQlyZXN1bHQgPSAqYWRkcjsKIAl9IHdoaWxlKH5yZXN1bHQgJiBCSVRfQlVTWSk7CiAKIAkqYWRkcj1DTURfUkVBRF9BUlJBWTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCX0KIAogCXdoaWxlKGNudD49OCkgewotCQlkYXRhPSooKHVuc2lnbmVkIGxvbmcgbG9uZyAqKXNyYyk7CisJCWRhdGEgPSAqKCh1bnNpZ25lZCBsb25nIGxvbmcgKilzcmMpOwogCQlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApCiAJCQlyZXR1cm4gcmM7CiAJCXNyYys9ODsKZGlmZiAtLWdpdCBhL2JvYXJkL21wMnVzYi9mbGFzaC5jIGIvYm9hcmQvbXAydXNiL2ZsYXNoLmMKaW5kZXggODljZWQxNi4uYzE5ZDQ0NSAxMDA2NDQKLS0tIGEvYm9hcmQvbXAydXNiL2ZsYXNoLmMKKysrIGIvYm9hcmQvbXAydXNiL2ZsYXNoLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCiAJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCiAJaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHsKLQkJcHJpbnRmICgibm90IGVyYXNlZCBhdCAlMDhseCAoJWx4KVxuIiwgKHVsb25nKSBhZGRyLCAqYWRkcik7CisJCXByaW50ZiAoIm5vdCBlcmFzZWQgYXQgJTA4bHggKCVseClcbiIsICh1bG9uZykgYWRkciwgKHVsb25nKSAqYWRkcik7CiAJCXJldHVybiAoMik7CiAJfQogCS8qCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTQwZXZhbC9mbGFzaC5jIGIvYm9hcmQvbXBjODU0MGV2YWwvZmxhc2guYwppbmRleCA3MzAwYTA0Li43OWViMDRjIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4NTQwZXZhbC9mbGFzaC5jCisrKyBiL2JvYXJkL21wYzg1NDBldmFsL2ZsYXNoLmMKQEAgLTU5MSw3ICs1OTEsNyBAQAogCQljbnQgLT0gRkxBU0hfQkxPQ0tfU0laRTsKIAkJaWYgKCgoY291bnQtY250KT4+MTApPnRlbXApIHsKIAkJCXRlbXA9KGNvdW50LWNudCk+PjEwOwotCQkJcHJpbnRmKCJcciVkIEtCIix0ZW1wKTsKKwkJCXByaW50ZigiXHIlbHUgS0IiLHRlbXApOwogCQl9CiAJfQogCXByaW50ZigiXG4iKTsKQEAgLTY5OSw3ICs2OTksOCBAQAogCQkJfQogCQl9CiAJCWlmIChjc3IgJiAweDQwNDApIHsKLQkJCXByaW50ZiAoIkNTUiBpbmRpY2F0ZXMgd3JpdGUgZXJyb3IgKCUwNHgpIGF0ICUwOGx4XG4iLCBjc3IsICh1bG9uZylhZGRyKTsKKwkJCXByaW50ZiAoIkNTUiBpbmRpY2F0ZXMgd3JpdGUgZXJyb3IgKCUwNGx4KSBhdCAlMDhseFxuIiwKKwkJCQljc3IsICh1bG9uZylhZGRyKTsKIAkJCWZsYWcgPSAxOwogCQl9CiAJCS8qIENsZWFyIFN0YXR1cyBSZWdpc3RlcnMgQ29tbWFuZCAqLwpAQCAtNzU2LDcgKzc1Nyw4IEBACiAJCQl9CiAJCX0KIAkJaWYgKGNzciAmIDB4NDA0MCkgewotCQkJcHJpbnRmICgiQ1NSIGluZGljYXRlcyB3cml0ZSBlcnJvciAoJTA0eCkgYXQgJTA4bHhcbiIsIGNzciwgKHVsb25nKWFkZHIpOworCQkJcHJpbnRmICgiQ1NSIGluZGljYXRlcyB3cml0ZSBlcnJvciAoJTA0bHgpIGF0ICUwOGx4XG4iLAorCQkJCWNzciwgKHVsb25nKWFkZHIpOwogCQkJZmxhZyA9IDE7CiAJCX0KIAkJLyogQ2xlYXIgU3RhdHVzIFJlZ2lzdGVycyBDb21tYW5kICovCmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvY29tbW9uL2NvbW1vbl91dGlsLmMgYi9ib2FyZC9tcGwvY29tbW9uL2NvbW1vbl91dGlsLmMKaW5kZXggMTFkNDM0NS4uMjRjZTgwNyAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5jCisrKyBiL2JvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYwpAQCAtMzU3LDggKzM1Nyw4IEBACiAJdW5zaWduZWQgb2ZmOwogCXVjaGFyICpuYW1lLCAqdmFsdWU7CiAKLQluYW1lPSZuYW1lX2J1ZlswXTsKLQl2YWx1ZT0mdmFsdWVfYnVmWzBdOworCW5hbWUgPSAmbmFtZV9idWZbMF07CisJdmFsdWUgPSAmdmFsdWVfYnVmWzBdOwogCWxlbj1zaXplOwogCW9mZiA9IHNpemVvZihsb25nKTsKIAl3aGlsZSAobGVuID4gb2ZmKSB7CkBAIC0zNzcsOCArMzc3LDggQEAKIAkJCQlpZihjID09ICdcMCcpCiAJCQkJCWJyZWFrOwogCQkJfSB3aGlsZShsZW4gPiBvZmYpOwotCQkJbmFtZT0mbmFtZV9idWZbMF07Ci0JCQl2YWx1ZT0mdmFsdWVfYnVmWzBdOworCQkJbmFtZSA9ICZuYW1lX2J1ZlswXTsKKwkJCXZhbHVlID0gJnZhbHVlX2J1ZlswXTsKIAkJCWlmKHN0cm5jbXAoKGNoYXIgKiluYW1lLCJiYXVkcmF0ZSIsOCkhPTApIHsKIAkJCQlzZXRlbnYoKGNoYXIgKiluYW1lLChjaGFyICopdmFsdWUpOwogCQkJfQpAQCAtNjM2LDEyICs2MzYsMTIgQEAKIAkJCQkJKytzOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJYnVmW2krK109KnM7CisJCQkJYnVmW2krK10gPSAqczsKIAkJCX0KIAkJCXNwcmludGYoJmJ1ZltpXSwiIFNOICIpOwogCQkJaSs9NDsKIAkJCWZvciAoOyBzIDwgZTsgKytzKSB7Ci0JCQkJYnVmW2krK109KnM7CisJCQkJYnVmW2krK10gPSAqczsKIAkJCX0KIAkJCWJ1ZltpKytdPTA7CiAJCX0KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9jb21tb24vZmxhc2guYyBiL2JvYXJkL21wbC9jb21tb24vZmxhc2guYwppbmRleCBhNDM3ZGFiLi5lYjI3MDJiIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvY29tbW9uL2ZsYXNoLmMKKysrIGIvYm9hcmQvbXBsL2NvbW1vbi9mbGFzaC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNpemVfYjEsZmxhc2hjcixzaXplX3JlZzsKIAlpbnQgbW9kZTsKIAlleHRlcm4gY2hhciB2ZXJzaW9uX3N0cmluZzsKLQljaGFyICpwPSZ2ZXJzaW9uX3N0cmluZzsKKwljaGFyICpwID0gJnZlcnNpb25fc3RyaW5nOwogCiAJLyogU2luY2Ugd2UgYXJlIHJlbG9jYXRlZCwgd2UgY2FuIHNldC11cCB0aGUgQ1MgZmluYWxseSAqLwogCXNldHVwX2NzX3JlbG9jKCk7CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvY29tbW9uL2tiZC5jIGIvYm9hcmQvbXBsL2NvbW1vbi9rYmQuYwppbmRleCA5MzFlZDQzLi5iMjBiOTUzIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvY29tbW9uL2tiZC5jCisrKyBiL2JvYXJkL21wbC9jb21tb24va2JkLmMKQEAgLTQ3NSw3ICs0NzUsNyBAQAogCWludCB2YWw7CiAJdW5zaWduZWQgY2hhciBzdGF0dXM7CiAKLQl2YWw9LTE7CisJdmFsID0gLTE7CiAJc3RhdHVzID0ga2JkX3JlYWRfc3RhdHVzKCk7CiAJaWYgKHN0YXR1cyAmIEtCRF9TVEFUX09CRikgewogCQl2YWwgPSBrYmRfcmVhZF9pbnB1dCgpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL2NvbW1vbi91c2JfdWhjaS5jIGIvYm9hcmQvbXBsL2NvbW1vbi91c2JfdWhjaS5jCmluZGV4IDY3NzhlNDAuLjY2NmI5OTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9jb21tb24vdXNiX3VoY2kuYworKysgYi9ib2FyZC9tcGwvY29tbW9uL3VzYl91aGNpLmMKQEAgLTUzNiw3ICs1MzYsNyBAQAogCXVoY2lfdGRfdCAqdGQsKnByZXZ0ZDsKIAogCWZvcihpPTA7aTw4O2krKykgewotCQlwcmV2dGQ9JnRkX2ludFtpXTsgLyogdGhlIGZpcnN0IHByZXZpb3VzIHRkIGlzIHRoZSBza2VsZXRvbiB0ZCAqLworCQlwcmV2dGQgPSAmdGRfaW50W2ldOyAvKiB0aGUgZmlyc3QgcHJldmlvdXMgdGQgaXMgdGhlIHNrZWxldG9uIHRkICovCiAJCWxpbms9c3dhcF8zMih0ZF9pbnRbaV0ubGluaykgJiAweGZmZmZmZmYwOyAvKiBuZXh0IGluIGNoYWluICovCiAJCXRkPSh1aGNpX3RkX3QgKilsaW5rOyAvKiBhc3NpZ24gaXQgKi8KIAkJLyogYWxsIGludGVycnVwdCBURHMgYXJlIGZpbmFsbHkgbGlua2VkIHRvIHRoZSB0ZF9pbnRbMF0uCkBAIC02MzgsNyArNjM4LDcgQEAKIAkJcmV0dXJuIDE7CiAJaXJxX2ZyZWVfaGFuZGxlcihpcnF2ZWMpOwogCXJlc2V0X2hjKCk7Ci0JaXJxdmVjPS0xOworCWlycXZlYyA9IC0xOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9ib2FyZC9uZXRzdGFsL2NvbW1vbi9ubV9ic3AuYyBiL2JvYXJkL25ldHN0YWwvY29tbW9uL25tX2JzcC5jCmluZGV4IDg2ZjQ5MWIuLmUzOGI3MDYgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHN0YWwvY29tbW9uL25tX2JzcC5jCisrKyBiL2JvYXJkL25ldHN0YWwvY29tbW9uL25tX2JzcC5jCkBAIC03NSw4ICs3NSw4IEBACiAJCXNldGVudigiaW5zdGFsbCIsIHN0cmluZyk7CiAJCXNwcmludGYoc3RyaW5nLCAic2V0ZW52IGJvb3RhcmdzIGVtYWMoMCwwKWM6JXMvJXNfc3dfaW5zdCAiCiAJCQkiZT0ke2lwYWRkcn0gaD0ke3NlcnZlcmlwfSBmPTB4MTAwMDsgIgotCQkJImJvb3R2eCAke2xvYWRhZGRyfVwwIiwKLQkJCWJvYXJkX25hbWUsIGJvYXJkX25hbWUpOworCQkJImJvb3R2eCAke2xvYWRhZGRyfSVjIiwKKwkJCWJvYXJkX25hbWUsIGJvYXJkX25hbWUsIDApOwogCQlzZXRlbnYoImJvb3Rfc3dfaW5zdCIsIHN0cmluZyk7CiAJfQogfQpAQCAtMTA4LDEwICsxMDgsMTIgQEAKIAkJZ2QtPmJkLT5iaV9lbmV0YWRkclszXSA9IChzZXJpYWwgPj4gMTYpICYgMHhmZjsKIAkJZ2QtPmJkLT5iaV9lbmV0YWRkcls0XSA9IChzZXJpYWwgPj4gIDgpICYgMHhmZjsKIAkJZ2QtPmJkLT5iaV9lbmV0YWRkcls1XSA9IGhjdV9nZXRfc2xvdCgpOwotCQlzcHJpbnRmKGV0aGFkZHIsICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFwwIiwKKwkJc3ByaW50ZihldGhhZGRyLCAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlglYyIsCiAJCQlnZC0+YmQtPmJpX2VuZXRhZGRyWzBdLCBnZC0+YmQtPmJpX2VuZXRhZGRyWzFdLAogCQkJZ2QtPmJkLT5iaV9lbmV0YWRkclsyXSwgZ2QtPmJkLT5iaV9lbmV0YWRkclszXSwKLQkJCWdkLT5iZC0+YmlfZW5ldGFkZHJbNF0sIGdkLT5iZC0+YmlfZW5ldGFkZHJbNV0pIDsKKwkJCWdkLT5iZC0+YmlfZW5ldGFkZHJbNF0sCisJCQlnZC0+YmQtPmJpX2VuZXRhZGRyWzVdLAorCQkJMCkgOwogCQlwcmludGYoIiVzOiBTZXR0aW5nIGV0aCAlcyBzZXJpYWwgMHgleFxuIiwgIF9fRlVOQ1RJT05fXywKIAkJICAgICAgIGV0aGFkZHIsIHNlcmlhbCk7CiAJCXNldGVudihERUZBVUxUX0VUSF9BRERSLCBldGhhZGRyKTsKZGlmZiAtLWdpdCBhL2JvYXJkL25ldHN0YWwvaGN1NS9zZHJhbS5jIGIvYm9hcmQvbmV0c3RhbC9oY3U1L3NkcmFtLmMKaW5kZXggODBlODRhZS4uNjZhOTU4YyAxMDA2NDQKLS0tIGEvYm9hcmQvbmV0c3RhbC9oY3U1L3NkcmFtLmMKKysrIGIvYm9hcmQvbmV0c3RhbC9oY3U1L3NkcmFtLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAl9CiAKIAlnZXRfc3lzX2luZm8oJmJvYXJkX2NmZyk7Ci0JcHJpbnRmKCIsICVkIE1IeiIsIChib2FyZF9jZmcuZnJlcVBMQiAqIDIpIC8gMTAwMDAwMCk7CisJcHJpbnRmKCIsICVsdSBNSHoiLCAoYm9hcmRfY2ZnLmZyZXFQTEIgKiAyKSAvIDEwMDAwMDApOwogCiAJbWZzZHJhbShERFIwXzAzLCB2YWwpOwogCXZhbCA9IEREUjBfMDNfQ0FTTEFUX0RFQ09ERSh2YWwpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbzJkbnQvZmxhc2guYyBiL2JvYXJkL28yZG50L2ZsYXNoLmMKaW5kZXggMDM3ZDI4Ny4uMzQ5MDg2ZiAxMDA2NDQKLS0tIGEvYm9hcmQvbzJkbnQvZmxhc2guYworKysgYi9ib2FyZC9vMmRudC9mbGFzaC5jCkBAIC00MTEsNyArNDExLDcgQEAKIAogCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwogCWlmICgoKmFkZHIgJiBkYXRhKSAhPSBkYXRhKSB7Ci0JCXByaW50ZiAoIm5vdCBlcmFzZWQgYXQgJTA4bHggKCVseClcbiIsICh1bG9uZykgYWRkciwgKmFkZHIpOworCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICgleClcbiIsICh1bG9uZykgYWRkciwgKmFkZHIpOwogCQlyZXR1cm4gKDIpOwogCX0KIAkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3Byb2RyaXZlL2FscHIvYWxwci5jIGIvYm9hcmQvcHJvZHJpdmUvYWxwci9hbHByLmMKaW5kZXggOGQ2MDkzNi4uMTMxYTYyZCAxMDA2NDQKLS0tIGEvYm9hcmQvcHJvZHJpdmUvYWxwci9hbHByLmMKKysrIGIvYm9hcmQvcHJvZHJpdmUvYWxwci9hbHByLmMKQEAgLTI4NywyNCArMjg3LDMgQEAKIAlyZXR1cm4gKGN0cmxjKCkpOwogfQogI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQotdm9pZCBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKLXsKLQl1MzIgdmFsWzRdOwotCWludCByYzsKLQotCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7Ci0KLQkvKiBGaXh1cCBOT1IgbWFwcGluZyAqLwotCXZhbFswXSA9IDA7CQkJCS8qIGNoaXAgc2VsZWN0IG51bWJlciAqLwotCXZhbFsxXSA9IDA7CQkJCS8qIGFsd2F5cyAwICovCi0JdmFsWzJdID0gZ2QtPmJkLT5iaV9mbGFzaHN0YXJ0OwotCXZhbFszXSA9IGdkLT5iZC0+YmlfZmxhc2hzaXplOwotCXJjID0gZmR0X2ZpbmRfYW5kX3NldHByb3AoYmxvYiwgIi9wbGIvb3BiL2ViYyIsICJyYW5nZXMiLAotCQkJCSAgdmFsLCBzaXplb2YodmFsKSwgMSk7Ci0JaWYgKHJjKQotCQlwcmludGYoIlVuYWJsZSB0byB1cGRhdGUgcHJvcGVydHkgTk9SIG1hcHBpbmcsIGVycj0lc1xuIiwKLQkJICAgICAgIGZkdF9zdHJlcnJvcihyYykpOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX09GX0xJQkZEVCkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApICovCmRpZmYgLS1naXQgYS9ib2FyZC9zYW5kYnVyc3QvbWV0cm9ib3gvbWV0cm9ib3guYyBiL2JvYXJkL3NhbmRidXJzdC9tZXRyb2JveC9tZXRyb2JveC5jCmluZGV4IDg2ZDI1OWYuLjY2Y2RmYjEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NhbmRidXJzdC9tZXRyb2JveC9tZXRyb2JveC5jCisrKyBiL2JvYXJkL3NhbmRidXJzdC9tZXRyb2JveC9tZXRyb2JveC5jCkBAIC0yNzAsNyArMjcwLDcgQEAKIAl9CiAKIAlwcmludGYgKCJPcHRvRlBHQSBJRDpcdDB4JTAyWFx0UmV2OiAgMHglMDJYXG4iLCBvcHRvX2lkLCBvcHRvX3Jldik7Ci0JcHJpbnRmICgiQm9hcmQgUmV2Olx0MHglMDJYXHRJRDogICVzXG4iLCBicmRfcmV2LCBib2FyZF9pZF9hc1ticmRfaWRdKTsKKwlwcmludGYgKCJCb2FyZCBSZXY6XHQweCUwMlhcdElEOiAgJXNcbiIsIGJyZF9yZXYsIGJvYXJkX2lkX2FzW2JyZF9pZF0ubmFtZSk7CiAKIAkvKiBGaXggdGhlIGFjayBpbiB0aGUgYm1lIDMyICovCiAJdWRlbGF5KDUwMDApOwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjODU2MC9zYmM4NTYwLmMgYi9ib2FyZC9zYmM4NTYwL3NiYzg1NjAuYwppbmRleCAyOTQ2Y2ExLi5kOWU1OThjIDEwMDY0NAotLS0gYS9ib2FyZC9zYmM4NTYwL3NiYzg1NjAuYworKysgYi9ib2FyZC9zYmM4NTYwL3NiYzg1NjAuYwpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPGlvcG9ydHMuaD4KICNpbmNsdWRlIDxzcGRfc2RyYW0uaD4KICNpbmNsdWRlIDxtaWlwaHkuaD4KKyNpbmNsdWRlIDxsaWJmZHQuaD4KKyNpbmNsdWRlIDxmZHRfc3VwcG9ydC5oPgogCiBsb25nIGludCBmaXhlZF9zZHJhbSAodm9pZCk7CiAKQEAgLTQyMSw3ICs0MjMsMTEgQEAKICAgI2lmbmRlZiBDRkdfUkFNQk9PVAogCXZvbGF0aWxlIGNjc3JfZGRyX3QgKmRkcj0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfRERSX0FERFIpOwogCisjaWYgKENGR19TRFJBTV9TSVpFID09IDUxMikKKwlkZHItPmNzMF9ibmRzCQk9IDB4MDAwMDAwMGY7CisjZWxzZQogCWRkci0+Y3MwX2JuZHMJCT0gMHgwMDAwMDAwNzsKKyNlbmRpZgogCWRkci0+Y3MxX2JuZHMJCT0gMHgwMDEwMDAxZjsKIAlkZHItPmNzMl9ibmRzCQk9IDB4MDAwMDAwMDA7CiAJZGRyLT5jczNfYm5kcwkJPSAweDAwMDAwMDAwOwpAQCAtNDUyLDMgKzQ1OCwyOSBAQAogCXJldHVybiBDRkdfU0RSQU1fU0laRSAqIDEwMjQgKiAxMDI0OwogfQogI2VuZGlmCS8qICFkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKSAqLworCisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKK3ZvaWQKK2Z0X2JvYXJkX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCWludCBub2RlLCB0bXBbMl07CisjaWZkZWYgQ09ORklHX1BDSQorCWNvbnN0IGNoYXIgKnBhdGg7CisjZW5kaWYKKworCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7CisKKwlub2RlID0gZmR0X3BhdGhfb2Zmc2V0KGJsb2IsICIvYWxpYXNlcyIpOworCXRtcFswXSA9IDA7CisJaWYgKG5vZGUgPj0gMCkgeworI2lmZGVmIENPTkZJR19QQ0kKKwkJcGF0aCA9IGZkdF9nZXRwcm9wKGJsb2IsIG5vZGUsICJwY2kwIiwgTlVMTCk7CisJCWlmIChwYXRoKSB7CisJCQl0bXBbMV0gPSBob3NlLmxhc3RfYnVzbm8gLSBob3NlLmZpcnN0X2J1c25vOworCQkJZG9fZml4dXBfYnlfcGF0aChibG9iLCBwYXRoLCAiYnVzLXJhbmdlIiwgJnRtcCwgOCwgMSk7CisJCX0KKyNlbmRpZgorCX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvc25tYy9xczg1MC9xczg1MC5jIGIvYm9hcmQvc25tYy9xczg1MC9xczg1MC5jCmluZGV4IGJhNWE4ZmIuLjJmYmU4YWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NubWMvcXM4NTAvcXM4NTAuYworKysgYi9ib2FyZC9zbm1jL3FzODUwL3FzODUwLmMKQEAgLTg2LDYgKzg2LDEzIEBACiAgKgogICogQWx3YXlzIHJldHVybiAxCiAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19RUzg1MCkKKyNkZWZpbmUgQk9BUkRfSURFTlRJVFkJIlFTODUwIgorI2VsaWYgZGVmaW5lZChDT05GSUdfUVM4MjMpCisjZGVmaW5lIEJPQVJEX0lERU5USVRZCSJRUzgyMyIKKyNlbHNlCisjZGVmaW5lCUJPQVJEX0lERU5USVRZCSJRUz8/PyIKKyNlbmRpZgogCiBpbnQgY2hlY2tib2FyZCAodm9pZCkKIHsKQEAgLTk2LDE0ICsxMDMsOCBAQAogCWkgPSBnZXRlbnZfcigic2VyaWFsIyIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCXMgPSAoaT4wKSA/IGJ1ZiA6IE5VTEw7CiAKLSNpZmRlZiBDT05GSUdfUVM4NTAKLQlpZiAoIXMgfHwgc3RybmNtcChzLCAiUVM4NTAiLCA1KSkgewotCQlwdXRzICgiIyMjIE5vIEhXIElEIC0gYXNzdW1pbmcgUVM4NTAiKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19RUzgyMwotCWlmICghcyB8fCBzdHJuY21wKHMsICJRUzgyMyIsIDUpKSB7Ci0JCXB1dHMgKCIjIyMgTm8gSFcgSUQgLSBhc3N1bWluZyBRUzgyMyIpOwotI2VuZGlmCisJaWYgKCFzIHx8IHN0cm5jbXAocywgQk9BUkRfSURFTlRJVFksIDUpKSB7CisJCXB1dHMgKCIjIyMgTm8gSFcgSUQgLSBhc3N1bWluZyAiIEJPQVJEX0lERU5USVRZKTsKIAl9IGVsc2UgewogCQlmb3IgKGU9czsgKmU7ICsrZSkgewogCQlpZiAoKmUgPT0gJyAnKQpkaWZmIC0tZ2l0IGEvYm9hcmQvc3BjMTkyMC9ocGkuYyBiL2JvYXJkL3NwYzE5MjAvaHBpLmMKaW5kZXggY2Q3Nzk5Yi4uY2YyMWIyMSAxMDA2NDQKLS0tIGEvYm9hcmQvc3BjMTkyMC9ocGkuYworKysgYi9ib2FyZC9zcGMxOTIwL2hwaS5jCkBAIC0yMzQsNyArMjM0LDggQEAKIAlIUElfSFBJQV8xID0gYWRkcjE7CiAJSFBJX0hQSUFfMiA9IGFkZHIyOwogCi0JZGVidWdYKDQsICJ3cml0aW5nIGZyb20gZGF0YT0weCV4IHRvIDB4JXhcbiIsIGRhdGEsIChkYXRhK2NvdW50KSk7CisJZGVidWdYKDQsICJ3cml0aW5nIGZyb20gZGF0YT0weCVseCB0byAweCVseFxuIiwKKwkJKHVsb25nKWRhdGEsICh1bG9uZykoZGF0YStjb3VudCkpOwogCiAJZm9yKGk9MDsgaTxjb3VudDsgaSsrKSB7CiAJCUhQSV9IUElEX0lOQ18xID0gKHUxNikgKChkYXRhW2ldID4+IDE2KSAmIDB4ZmZmZik7CmRpZmYgLS1naXQgYS9ib2FyZC90b3RhbDUyMDAvdG90YWw1MjAwLmMgYi9ib2FyZC90b3RhbDUyMDAvdG90YWw1MjAwLmMKaW5kZXggODY4ZWJkNS4uMWFlMjRjNCAxMDA2NDQKLS0tIGEvYm9hcmQvdG90YWw1MjAwL3RvdGFsNTIwMC5jCisrKyBiL2JvYXJkL3RvdGFsNTIwMC90b3RhbDUyMDAuYwpAQCAtNjcsMTQgKzY3LDE0IEBACiAJcHV0cyAoIkJvYXJkOiBUb3RhbDUxMDAgIik7CiAjZW5kaWYKIAotLyoKLSAqIFJldHJpZXZlIEZQR0EgUmV2aXNpb24uCi0gKi8KLXByaW50ZiAoIihGUEdBICUwOFgpXG4iLCAqKHZ1X2xvbmcgKikgKENGR19GUEdBX0JBU0UgKyAweDQwMCkpOworCS8qCisJICogUmV0cmlldmUgRlBHQSBSZXZpc2lvbi4KKwkgKi8KKwlwcmludGYgKCIoRlBHQSAlMDhsWClcbiIsICoodnVfbG9uZyAqKSAoQ0ZHX0ZQR0FfQkFTRSArIDB4NDAwKSk7CiAKLS8qCi0gKiBUYWtlIGFsbCBwZXJpcGhlcmFscyBpbiBwb3dlci11cCBtb2RlLgotICovCisJLyoKKwkgKiBUYWtlIGFsbCBwZXJpcGhlcmFscyBpbiBwb3dlci11cCBtb2RlLgorCSAqLwogI2lmIENPTkZJR19UT1RBTDUyMDBfUkVWPT0yCiAJKih2dV9jaGFyICopIChDRkdfQ1BMRF9CQVNFICsgMHg0NikgPSAweDcwOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2JvYXJkL3RxYy90cW01MjAwL2NtZF9zdGs1Mnh4LmMgYi9ib2FyZC90cWMvdHFtNTIwMC9jbWRfc3RrNTJ4eC5jCmluZGV4IDc0NzJjYTkuLmZkMWU2OGIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxYy90cW01MjAwL2NtZF9zdGs1Mnh4LmMKKysrIGIvYm9hcmQvdHFjL3RxbTUyMDAvY21kX3N0azUyeHguYwpAQCAtMTkyLDEwICsxOTIsMTAgQEAKIAlwc2MtPmNvbW1hbmQgPSAoUFNDX1JYX0VOQUJMRSB8IFBTQ19UWF9FTkFCTEUpOwogCiAJZm9yKGkgPSAwO2kgPCAobGVuIC8gNCk7IGkrKykgewotCQlzd2FwcGVkWzNdPSp3YXZlX2ZpbGUrKzsKLQkJc3dhcHBlZFsyXT0qd2F2ZV9maWxlKys7Ci0JCXN3YXBwZWRbMV09KndhdmVfZmlsZSsrOwotCQlzd2FwcGVkWzBdPSp3YXZlX2ZpbGUrKzsKKwkJc3dhcHBlZFszXSA9ICp3YXZlX2ZpbGUrKzsKKwkJc3dhcHBlZFsyXSA9ICp3YXZlX2ZpbGUrKzsKKwkJc3dhcHBlZFsxXSA9ICp3YXZlX2ZpbGUrKzsKKwkJc3dhcHBlZFswXSA9ICp3YXZlX2ZpbGUrKzsKIAkJcHNjLT5wc2NfYnVmZmVyXzMyID0gICooKHVuc2lnbmVkIGxvbmcqKXN3YXBwZWQpOwogCQl3aGlsZSAocHNjLT50Zm51bSA+IDQwMCkgewogCQkJaWYoY3RybGMoKSkKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCX0KIAlzZXRfYXR0ZW51YXRpb24odm9sdW1lKTsKIAotCXByaW50ZigiUGxheSB3YXZlIGZpbGUgYXQgJSNwIHdpdGggbGVuZ3RoICUjeFxuIiwgYWRkciwgbGVuZ3RoKTsKKwlwcmludGYoIlBsYXkgd2F2ZSBmaWxlIGF0ICVsWCB3aXRoIGxlbmd0aCAlbFhcbiIsIGFkZHIsIGxlbmd0aCk7CiAJcmNvZGUgPSBpMnNfcGxheV93YXZlKGFkZHIsIGxlbmd0aCk7CiAKIAlyZXR1cm4gcmNvZGU7CmRpZmYgLS1naXQgYS9ib2FyZC90cWMvdHFtODI3Mi90cW04MjcyLmMgYi9ib2FyZC90cWMvdHFtODI3Mi90cW04MjcyLmMKaW5kZXggMjkwOTlmNS4uY2RlMDI5NiAxMDA2NDQKLS0tIGEvYm9hcmQvdHFjL3RxbTgyNzIvdHFtODI3Mi5jCisrKyBiL2JvYXJkL3RxYy90cW04MjcyL3RxbTgyNzIuYwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJCXByaW50ZiAoImV0aGFkZHI6ICVzXG4iLCBody0+ZXRoYWRkcik7CiAJCXByaW50ZiAoIkZMQVNICTogJXggbnI6JWRcbiIsIGh3LT5mbGFzaCwgaHctPmZsYXNoX25yKTsKIAkJcHJpbnRmICgiUkFNCTogJXggY3M6JWRcbiIsIGh3LT5yYW0sIGh3LT5yYW1fY3MpOwotCQlwcmludGYgKCJDUFUJOiAlZFxuIiwgaHctPmNwdW5yKTsKKwkJcHJpbnRmICgiQ1BVCTogJWx1XG4iLCBody0+Y3B1bnIpOwogCQlwcmludGYgKCJDQU4JOiAlZFxuIiwgaHctPmNhbik7CiAJCWlmIChody0+ZWVwcm9tKSBwcmludGYgKCJFRXByb20gOiAleFxuIiwgaHctPmVlcHJvbSk7CiAJCWVsc2UgcHJpbnRmICgiTm8gRUVwcm9tXG4iKTsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCQlwcmludGYgKCJCdXMgJXMgbW9kZS5cbiIsIChody0+QnVzID8gIjYweCIgOiAiU2luZ2xlIFBRSUkiKSk7CiAJCXByaW50ZiAoIiAgcmVhbCA6ICVzXG4iLCAoaW1tci0+aW1fc2l1X2NvbmYuc2NfYmNyICYgQkNSX0VCTSA/IFwKIAkJCQkgIjYweCIgOiAiU2luZ2xlIFBRSUkiKSk7Ci0JCXByaW50ZiAoIk9wdGlvbiA6ICV4XG4iLCBody0+b3B0aW9uKTsKKwkJcHJpbnRmICgiT3B0aW9uIDogJWx4XG4iLCBody0+b3B0aW9uKTsKIAkJcHJpbnRmICgiJXMgU2VjdXJpdHkgRW5naW5lXG4iLCAoaHctPlNlY0VuZyA/ICJ3aXRoIiA6ICJubyIpKTsKIAkJcHJpbnRmICgiQ1BNIENsazogJWRcbiIsIGh3LT5jcG1jbCk7CiAJCXByaW50ZiAoIkNQVSBDbGs6ICVkXG4iLCBody0+Y3B1Y2wpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHFjL3RxbTg1eHgvdHFtODV4eC5jIGIvYm9hcmQvdHFjL3RxbTg1eHgvdHFtODV4eC5jCmluZGV4IGYxYzJlNTguLjgzOWQ0N2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxYy90cW04NXh4L3RxbTg1eHguYworKysgYi9ib2FyZC90cWMvdHFtODV4eC90cW04NXh4LmMKQEAgLTQ2NCw3ICs0NjQsOCBAQAogCiAJaWYgKGxiY19taHogPCA2NikgewogCQlsYmMtPmxjcnIgPSBDRkdfTEJDX0xDUlIgfCBMQ1JSX0RCWVA7CS8qIERMTCBCeXBhc3MgKi8KLQkJbGJjLT5sdGVkciA9IDB4YTRjODAwMDA7CS8qIERLOiAhISEgKi8KKwkJbGJjLT5sdGVkciA9IExURURSX0JNRCB8IExURURSX1BBUkQgfCBMVEVEUl9XUEQgfCBMVEVSRF9XQVJBIHwKKwkJCSAgICAgTFRFRFJfUkFXQSB8IExURURSX0NTRDsJLyogRGlzYWJsZSBhbGwgZXJyb3IgY2hlY2tpbmcgKi8KIAogCX0gZWxzZSBpZiAobGJjX21oeiA+PSAxMzMpIHsKIAkJbGJjLT5sY3JyID0gQ0ZHX0xCQ19MQ1JSICYgKH5MQ1JSX0RCWVApOwkvKiBETEwgRW5hYmxlZCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdmVyc2F0aWxlL2ZsYXNoLmMgYi9ib2FyZC92ZXJzYXRpbGUvZmxhc2guYwppbmRleCBjYTc3YzhhLi5iYmU1ZGY3IDEwMDY0NAotLS0gYS9ib2FyZC92ZXJzYXRpbGUvZmxhc2guYworKysgYi9ib2FyZC92ZXJzYXRpbGUvZmxhc2guYwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAKIAkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KIAlpZiAoKCphZGRyICYgZGF0YSkgIT0gZGF0YSkgewotCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICgleClcbiIsICh1bG9uZykgYWRkciwgKmFkZHIpOworCQlwcmludGYgKCJub3QgZXJhc2VkIGF0ICUwOGx4ICglbHgpXG4iLCAodWxvbmcpIGFkZHIsICh1bG9uZykgKmFkZHIpOwogCQlyZXR1cm4gKDIpOwogCX0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvenlsb25pdGUvbmFuZC5jIGIvYm9hcmQvenlsb25pdGUvbmFuZC5jCmluZGV4IGFhMzkzMmEuLmNhMTY1NzggMTAwNjQ0Ci0tLSBhL2JvYXJkL3p5bG9uaXRlL25hbmQuYworKysgYi9ib2FyZC96eWxvbml0ZS9uYW5kLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYoZ2V0X2RlbHRhKHN0YXJ0KSA+IHRpbWVvdXQpIHsKLQkJCURGQ19ERUJVRzEoImRmY193YWl0X2V2ZW50OiBUSU1FT1VUIHdhaXRpbmcgZm9yIGV2ZW50OiAweCV4LlxuIiwgZXZlbnQpOworCQkJREZDX0RFQlVHMSgiZGZjX3dhaXRfZXZlbnQ6IFRJTUVPVVQgd2FpdGluZyBmb3IgZXZlbnQ6IDB4JWx4LlxuIiwgZXZlbnQpOwogCQkJcmV0dXJuIDB4ZmYwMDAwMDA7CiAJCX0KIApkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9iZGluZm8uYyBiL2NvbW1vbi9jbWRfYmRpbmZvLmMKaW5kZXggY2FhNDY3ZC4uMjRmZjliOSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9iZGluZm8uYworKysgYi9jb21tb24vY21kX2JkaW5mby5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAlwdXRzICgiXG5pcF9hZGRyICAgICA9ICIpOwogCXByaW50X0lQYWRkciAoYmQtPmJpX2lwX2FkZHIpOwogI2VuZGlmCi0JcHJpbnRmICgiXG5iYXVkcmF0ZSAgICA9ICVkIGJwc1xuIiwgKHVsb25nKWJkLT5iaV9iYXVkcmF0ZSk7CisJcHJpbnRmICgiXG5iYXVkcmF0ZSAgICA9ICVsZCBicHNcbiIsICh1bG9uZyliZC0+YmlfYmF1ZHJhdGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2Jvb3RtLmMgYi9jb21tb24vY21kX2Jvb3RtLmMKaW5kZXggZjcwMWFiNi4uMWMwYTQxNiAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9ib290bS5jCisrKyBiL2NvbW1vbi9jbWRfYm9vdG0uYwpAQCAtMzYsNiArMzYsMTAgQEAKICNpbmNsdWRlIDxsbWIuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9VU0IpCisjaW5jbHVkZSA8dXNiLmg+CisjZW5kaWYKKwogI2lmZGVmIENGR19IVVNIX1BBUlNFUgogI2luY2x1ZGUgPGh1c2guaD4KICNlbmRpZgpAQCAtMjEzLDYgKzIxNywyMCBAQAogCSAqLwogCWlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9VU0IpCisJLyoKKwkgKiB0dXJuIG9mZiBVU0IgdG8gcHJldmVudCB0aGUgaG9zdCBjb250cm9sbGVyIGZyb20gd3JpdGluZyB0byB0aGUKKwkgKiBTRFJBTSB3aGlsZSBMaW51eCBpcyBib290aW5nLiBUaGlzIGNvdWxkIGhhcHBlbiAoYXQgbGVhc3QgZm9yIE9IQ0kKKwkgKiBjb250cm9sbGVyKSwgYmVjYXVzZSB0aGUgSENDQSAoSG9zdCBDb250cm9sbGVyIENvbW11bmljYXRpb24gQXJlYSkKKwkgKiBsaWVzIHdpdGhpbiB0aGUgU0RSQU0gYW5kIHRoZSBob3N0IGNvbnRyb2xsZXIgd3JpdGVzIGNvbnRpbm91c2x5IHRvCisJICogdGhpcyBhcmVhIChhcyBidXNtYXN0ZXIhKS4gVGhlIEhjY2FGcmFtZU51bWJlciBpcyBmb3IgZXhhbXBsZQorCSAqIHVwZGF0ZWQgZXZlcnkgMSBtcyB3aXRoaW4gdGhlIEhDQ0Egc3RydWN0dXJlIGluIFNEUkFNISBGb3IgbW9yZQorCSAqIGRldGFpbHMgc2VlIHRoZSBPcGVuSENJIHNwZWNpZmljYXRpb24uCisJICovCisJdXNiX3N0b3AoKTsKKyNlbmRpZgorCisKICNpZmRlZiBDT05GSUdfQU1JR0FPTkVHM1NFCiAJLyoKIAkgKiBXZSd2ZSBwb3NzaWJsZSBsZWZ0IHRoZSBjYWNoZXMgZW5hYmxlZCBkdXJpbmcKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZmRjLmMgYi9jb21tb24vY21kX2ZkYy5jCmluZGV4IGU0ZmJmMjkuLjg0OTNkZWYgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfZmRjLmMKKysrIGIvY29tbW9uL2NtZF9mZGMuYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJaWYocmVhZGJsaz5ibG9ja3MpIC8qIGlzIGVuZCB3aXRoaW4gMXN0IHRyYWNrICovCiAJCXJlYWRibGs9YmxvY2tzOyAvKiB5ZXMsIGNvcnJlY3QgaXQgKi8KIAlQUklOVEYoIndlIHJlYWQgJWxkIGJsb2NrcyBzdGFydCAlbGRcbiIscmVhZGJsayxwQ01ELT5ibG5yKTsKLQlidWZmZXJ3PSZidWZmZXJbMF07IC8qIHNldHVwIHdvcmtpbmcgYnVmZmVyICovCisJYnVmZmVydyA9ICZidWZmZXJbMF07IC8qIHNldHVwIHdvcmtpbmcgYnVmZmVyICovCiAJZG8gewogcmV0cnlydzoKIAkJbGVuPXNlY3Rfc2l6ZSAqIHJlYWRibGs7CkBAIC01NjYsNyArNTY2LDcgQEAKIAkJICogd2UgbmVlZCB0byBnZXQgdGhlIHJlc3VsdHMgKi8KIAkJZmRjX3Rlcm1pbmF0ZShwQ01EKTsKIAkJb2Zmc2V0Kz0oc2VjdF9zaXplKnJlYWRibGspOyAvKiBzZXQgdXAgYnVmZmVyIHBvaW50ZXIgKi8KLQkJYnVmZmVydz0mYnVmZmVyW29mZnNldF07CisJCWJ1ZmZlcncgPSAmYnVmZmVyW29mZnNldF07CiAJCXBDTUQtPmJsbnIrPXJlYWRibGs7IC8qIHVwZGF0ZSBjdXJyZW50IGJsb2NrIG5yICovCiAJCWJsb2Nrcy09cmVhZGJsazsgLyogdXBkYXRlIGJsb2NrcyAqLwogCQlpZihibG9ja3M9PTApCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2ZsYXNoLmMgYi9jb21tb24vY21kX2ZsYXNoLmMKaW5kZXggZGI1ZGVjOS4uYTdmNjZkZCAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9mbGFzaC5jCisrKyBiL2NvbW1vbi9jbWRfZmxhc2guYwpAQCAtMjEwLDcgKzIxMCw3IEBACiAJCXNfbGFzdCBbYmFua10gPSAtMTsJLyogbGFzdCAgc2VjdG9yIHRvIGVyYXNlCSovCiAJfQogCi0JZm9yIChiYW5rPTAsaW5mbz0mZmxhc2hfaW5mb1swXTsKKwlmb3IgKGJhbms9MCxpbmZvID0gJmZsYXNoX2luZm9bMF07CiAJICAgICAoYmFuayA8IENGR19NQVhfRkxBU0hfQkFOS1MpICYmIChhZGRyX2ZpcnN0IDw9IGFkZHJfbGFzdCk7CiAJICAgICArK2JhbmssICsraW5mbykgewogCQl1bG9uZyBiX2VuZDsKQEAgLTM2MCw3ICszNjAsNyBAQAogCQkJCWFkZHJfbGFzdCA9IGFkZHJfZmlyc3QgKyBwYXJ0LT5zaXplIC0gMTsKIAogCQkJCXByaW50ZiAoIkVyYXNlIEZsYXNoIFBhcml0aW9uICVzLCAiCi0JCQkJCQkiYmFuayAlZCwgMHglMDhseCAtIDB4JTA4bHggIiwKKwkJCQkJCSJiYW5rICVsZCwgMHglMDhseCAtIDB4JTA4bHggIiwKIAkJCQkJCWFyZ3ZbMV0sIGJhbmssIGFkZHJfZmlyc3QsCiAJCQkJCQlhZGRyX2xhc3QpOwogCkBAIC00MjcsNyArNDI3LDcgQEAKIAkJCQkJc19maXJzdCwgc19sYXN0LCAmcGxhbm5lZCApOwogCiAJaWYgKHBsYW5uZWQgJiYgKHJjb2RlID09IDApKSB7Ci0JCWZvciAoYmFuaz0wLGluZm89JmZsYXNoX2luZm9bMF07CisJCWZvciAoYmFuaz0wLGluZm8gPSAmZmxhc2hfaW5mb1swXTsKIAkJICAgICAoYmFuayA8IENGR19NQVhfRkxBU0hfQkFOS1MpICYmIChyY29kZSA9PSAwKTsKIAkJICAgICArK2JhbmssICsraW5mbykgewogCQkJaWYgKHNfZmlyc3RbYmFua10+PTApIHsKQEAgLTU2Niw3ICs1NjYsNyBAQAogCQkJCWFkZHJfbGFzdCA9IGFkZHJfZmlyc3QgKyBwYXJ0LT5zaXplIC0gMTsKIAogCQkJCXByaW50ZiAoIiVzUHJvdGVjdCBGbGFzaCBQYXJpdGlvbiAlcywgIgotCQkJCQkJImJhbmsgJWQsIDB4JTA4bHggLSAweCUwOGx4XG4iLAorCQkJCQkJImJhbmsgJWxkLCAweCUwOGx4IC0gMHglMDhseFxuIiwKIAkJCQkJCXAgPyAiIiA6ICJVbiIsIGFyZ3ZbMV0sCiAJCQkJCQliYW5rLCBhZGRyX2ZpcnN0LCBhZGRyX2xhc3QpOwogCkBAIC02NTEsNyArNjUxLDcgQEAKIAlwcm90ZWN0ZWQgPSAwOwogCiAJaWYgKHBsYW5uZWQgJiYgKHJjb2RlID09IDApKSB7Ci0JCWZvciAoYmFuaz0wLGluZm89JmZsYXNoX2luZm9bMF07IGJhbmsgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2JhbmssICsraW5mbykgeworCQlmb3IgKGJhbms9MCxpbmZvID0gJmZsYXNoX2luZm9bMF07IGJhbmsgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2JhbmssICsraW5mbykgewogCQkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKIAkJCQljb250aW51ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZnBnYS5jIGIvY29tbW9uL2NtZF9mcGdhLmMKaW5kZXggOTE0MWRjYy4uZGNiYmM5OSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9mcGdhLmMKKysrIGIvY29tbW9uL2NtZF9mcGdhLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAlsZW5ndGggPSAoKmRhdGFwdHIgPDwgOCkgKyAqKGRhdGFwdHIrMSk7CiAJZGF0YXB0cis9MjsKIAlmb3IoaT0wO2k8bGVuZ3RoO2krKykKLQkJYnVmZmVyW2ldPSpkYXRhcHRyKys7CisJCWJ1ZmZlcltpXSA9ICpkYXRhcHRyKys7CiAKIAlwcmludGYoIiAgZGVzaWduIGZpbGVuYW1lID0gXCIlc1wiXG4iLCBidWZmZXIpOwogCkBAIC05OSw3ICs5OSw3IEBACiAJbGVuZ3RoID0gKCpkYXRhcHRyIDw8IDgpICsgKihkYXRhcHRyKzEpOwogCWRhdGFwdHIrPTI7CiAJZm9yKGk9MDtpPGxlbmd0aDtpKyspCi0JCWJ1ZmZlcltpXT0qZGF0YXB0cisrOworCQlidWZmZXJbaV0gPSAqZGF0YXB0cisrOwogCXByaW50ZigiICBwYXJ0IG51bWJlciA9IFwiJXNcIlxuIiwgYnVmZmVyKTsKIAogCS8qIGdldCBkYXRlIChpZGVudGlmaWVyLCBsZW5ndGgsIHN0cmluZykgKi8KQEAgLTExMiw3ICsxMTIsNyBAQAogCWxlbmd0aCA9ICgqZGF0YXB0ciA8PCA4KSArICooZGF0YXB0cisxKTsKIAlkYXRhcHRyKz0yOwogCWZvcihpPTA7aTxsZW5ndGg7aSsrKQotCQlidWZmZXJbaV09KmRhdGFwdHIrKzsKKwkJYnVmZmVyW2ldID0gKmRhdGFwdHIrKzsKIAlwcmludGYoIiAgZGF0ZSA9IFwiJXNcIlxuIiwgYnVmZmVyKTsKIAogCS8qIGdldCB0aW1lIChpZGVudGlmaWVyLCBsZW5ndGgsIHN0cmluZykgKi8KQEAgLTEyNCw3ICsxMjQsNyBAQAogCWxlbmd0aCA9ICgqZGF0YXB0ciA8PCA4KSArICooZGF0YXB0cisxKTsKIAlkYXRhcHRyKz0yOwogCWZvcihpPTA7aTxsZW5ndGg7aSsrKQotCQlidWZmZXJbaV09KmRhdGFwdHIrKzsKKwkJYnVmZmVyW2ldID0gKmRhdGFwdHIrKzsKIAlwcmludGYoIiAgdGltZSA9IFwiJXNcIlxuIiwgYnVmZmVyKTsKIAogCS8qIGdldCBmcGdhIGRhdGEgbGVuZ3RoIChpZGVudGlmaWVyLCBsZW5ndGgpICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2lkZS5jIGIvY29tbW9uL2NtZF9pZGUuYwppbmRleCA5N2E4NzNkLi41NmRiNDMzIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2lkZS5jCisrKyBiL2NvbW1vbi9jbWRfaWRlLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogCQl1bG9uZyBhZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTYpOwogCQl1bG9uZyBjbnQgID0gc2ltcGxlX3N0cnRvdWwoYXJndls0XSwgTlVMTCwgMTYpOwogCQl1bG9uZyBuOwotI2lmZGVmIENGR182NEJJVF9TVFJUT1VMCisjaWZkZWYgQ0ZHXzY0QklUX0xCQQogCQlsYmFpbnRfdCBibGsgID0gc2ltcGxlX3N0cnRvdWxsKGFyZ3ZbM10sIE5VTEwsIDE2KTsKIAogCQlwcmludGYgKCJcbklERSByZWFkOiBkZXZpY2UgJWQgYmxvY2sgIyAlcWQsIGNvdW50ICVsZCAuLi4gIiwKQEAgLTMyNyw3ICszMjcsNyBAQAogCQl1bG9uZyBhZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTYpOwogCQl1bG9uZyBjbnQgID0gc2ltcGxlX3N0cnRvdWwoYXJndls0XSwgTlVMTCwgMTYpOwogCQl1bG9uZyBuOwotI2lmZGVmIENGR182NEJJVF9TVFJUT1VMCisjaWZkZWYgQ0ZHXzY0QklUX0xCQQogCQlsYmFpbnRfdCBibGsgID0gc2ltcGxlX3N0cnRvdWxsKGFyZ3ZbM10sIE5VTEwsIDE2KTsKIAogCQlwcmludGYgKCJcbklERSB3cml0ZTogZGV2aWNlICVkIGJsb2NrICMgJXFkLCBjb3VudCAlbGQgLi4uICIsCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2pmZnMyLmMgYi9jb21tb24vY21kX2pmZnMyLmMKaW5kZXggMWI2N2U3My4uYjQ2OThiZSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9qZmZzMi5jCisrKyBiL2NvbW1vbi9jbWRfamZmczIuYwpAQCAtMjQxLDEzICsyNDEsMTMgQEAKICNkZWZpbmUgU0laRV9LQiAoKHUzMikxMDI0KQogCiAJaWYgKChzaXplICUgU0laRV9HQikgPT0gMCkKLQkJc3ByaW50ZihidWYsICIlbHVnIiwgc2l6ZS9TSVpFX0dCKTsKKwkJc3ByaW50ZihidWYsICIldWciLCBzaXplL1NJWkVfR0IpOwogCWVsc2UgaWYgKChzaXplICUgU0laRV9NQikgPT0gMCkKLQkJc3ByaW50ZihidWYsICIlbHVtIiwgc2l6ZS9TSVpFX01CKTsKKwkJc3ByaW50ZihidWYsICIldW0iLCBzaXplL1NJWkVfTUIpOwogCWVsc2UgaWYgKHNpemUgJSBTSVpFX0tCID09IDApCi0JCXNwcmludGYoYnVmLCAiJWx1ayIsIHNpemUvU0laRV9LQik7CisJCXNwcmludGYoYnVmLCAiJXVrIiwgc2l6ZS9TSVpFX0tCKTsKIAllbHNlCi0JCXNwcmludGYoYnVmLCAiJWx1Iiwgc2l6ZSk7CisJCXNwcmludGYoYnVmLCAiJXUiLCBzaXplKTsKIH0KIAogLyoqCkBAIC00MTYsNyArNDE2LDcgQEAKIAkJcGFydC0+c2l6ZSA9IGlkLT5zaXplIC0gcGFydC0+b2Zmc2V0OwogCiAJaWYgKHBhcnQtPm9mZnNldCA+IGlkLT5zaXplKSB7Ci0JCXByaW50ZigiJXM6IG9mZnNldCAlMDhseCBiZXlvbmQgZmxhc2ggc2l6ZSAlMDhseFxuIiwKKwkJcHJpbnRmKCIlczogb2Zmc2V0ICUwOHggYmV5b25kIGZsYXNoIHNpemUgJTA4eFxuIiwKIAkJCQlpZC0+bXRkX2lkLCBwYXJ0LT5vZmZzZXQsIGlkLT5zaXplKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTI4OCw3ICsxMjg4LDcgQEAKIAlpZiAoY3VycmVudF9kZXYpIHsKIAkJcGFydCA9IGpmZnMyX3BhcnRfaW5mbyhjdXJyZW50X2RldiwgY3VycmVudF9wYXJ0bnVtKTsKIAkJaWYgKHBhcnQpIHsKLQkJCXByaW50ZigiXG5hY3RpdmUgcGFydGl0aW9uOiAlcyVkLCVkIC0gKCVzKSAweCUwOGx4IEAgMHglMDhseFxuIiwKKwkJCXByaW50ZigiXG5hY3RpdmUgcGFydGl0aW9uOiAlcyVkLCVkIC0gKCVzKSAweCUwOHggQCAweCUwOHhcbiIsCiAJCQkJCU1URF9ERVZfVFlQRShjdXJyZW50X2Rldi0+aWQtPnR5cGUpLAogCQkJCQljdXJyZW50X2Rldi0+aWQtPm51bSwgY3VycmVudF9wYXJ0bnVtLAogCQkJCQlwYXJ0LT5uYW1lLCBwYXJ0LT5zaXplLCBwYXJ0LT5vZmZzZXQpOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9tZnNsLmMgYi9jb21tb24vY21kX21mc2wuYwppbmRleCA1OTgyYjc2Li5jMjQ0MmVlIDEwMDY0NAotLS0gYS9jb21tb24vY21kX21mc2wuYworKysgYi9jb21tb24vY21kX21mc2wuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCXByaW50ZiAoIiUwMXg6IDB4JTA4bHggLSAlcyAlcyByZWFkXG4iLCBmc2xudW0sIG51bSwKKwlwcmludGYgKCIlMDF4OiAweCUwOHggLSAlcyAlcyByZWFkXG4iLCBmc2xudW0sIG51bSwKIAkJYmxvY2tpbmcgPCAyICA/ICJub24gYmxvY2tpbmciIDogImJsb2NraW5nIiwKIAkJKChibG9ja2luZyA9PSAxKSB8fCAoYmxvY2tpbmcgPT0gMykpID8gImNvbnRyb2wiIDogImRhdGEiICk7CiAJcmV0dXJuIDA7CkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JcHJpbnRmICgiJTAxeDogMHglMDhseCAtICVzICVzIHdyaXRlXG4iLCBmc2xudW0sIG51bSwKKwlwcmludGYgKCIlMDF4OiAweCUwOHggLSAlcyAlcyB3cml0ZVxuIiwgZnNsbnVtLCBudW0sCiAJCWJsb2NraW5nIDwgMiAgPyAibm9uIGJsb2NraW5nIiA6ICJibG9ja2luZyIsCiAJCSgoYmxvY2tpbmcgPT0gMSkgfHwgKGJsb2NraW5nID09IDMpKSA/ICJjb250cm9sIiA6ICJkYXRhIiApOwogCXJldHVybiAwOwpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCXB1dHMgKCJVbnN1cHBvcnRlZCByZWdpc3RlclxuIik7CiAJCXJldHVybiAxOwogCX0KLQlwcmludGYgKCI6IDB4JTA4bHhcbiIsIHZhbCk7CisJcHJpbnRmICgiOiAweCUwOHhcbiIsIHZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbXAuYyBiL2NvbW1vbi9jbWRfbXAuYwppbmRleCAyNmE1N2M1Li5iMmEzOTdjIDEwMDY0NAotLS0gYS9jb21tb24vY21kX21wLmMKKysrIGIvY29tbW9uL2NtZF9tcC5jCkBAIC0zNSw3ICszNSw3IEBACiAKIAljcHVpZCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDEwKTsKIAlpZiAoY3B1aWQgPj0gQ09ORklHX05SX0NQVVMpIHsKLQkJcHJpbnRmICgiQ29yZSBudW06ICVkIGlzIG91dCBvZiByYW5nZVswLi4lZF1cbiIsCisJCXByaW50ZiAoIkNvcmUgbnVtOiAlbHUgaXMgb3V0IG9mIHJhbmdlWzAuLiVkXVxuIiwKIAkJCQljcHVpZCwgQ09ORklHX05SX0NQVVMgLSAxKTsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9uYW5kLmMgYi9jb21tb24vY21kX25hbmQuYwppbmRleCBjYzdjNWJhLi45ZTM4YmY3IDEwMDY0NAotLS0gYS9jb21tb24vY21kX25hbmQuYworKysgYi9jb21tb24vY21kX25hbmQuYwpAQCAtODg2LDkgKzg4Niw5IEBACiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAKLQkJCXByaW50ZiAoIlxuTkFORCAlczogZGV2aWNlICVkIG9mZnNldCAlbGQsIHNpemUgJWxkIC4uLlxuIiwKKwkJCXByaW50ZiAoIlxuTkFORCAlczogZGV2aWNlICVkIG9mZnNldCAlbGQsIHNpemUgJWx1IC4uLlxuIiwKIAkJCQkoY21kICYgTkFORFJXX1JFQUQpID8gInJlYWQiIDogIndyaXRlIiwKLQkJCQljdXJyX2RldmljZSwgb2ZmLCBzaXplKTsKKwkJCQljdXJyX2RldmljZSwgb2ZmLCAodWxvbmcpc2l6ZSk7CiAKIAkJCXJldCA9IG5hbmRfbGVnYWN5X3J3IChuYW5kX2Rldl9kZXNjICsgY3Vycl9kZXZpY2UsCiAJCQkJCSAgICAgIGNtZCwgb2ZmLCBzaXplLApkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9udmVkaXQuYyBiL2NvbW1vbi9jbWRfbnZlZGl0LmMKaW5kZXggODVhMGY5NC4uNzA4OTcwNiAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9udmVkaXQuYworKysgYi9jb21tb24vY21kX252ZWRpdC5jCkBAIC05OSw3ICs5OSw4IEBACiAJCQl9CiAJCX0KIAotCQlwcmludGYoIlxuRW52aXJvbm1lbnQgc2l6ZTogJWQvJWQgYnl0ZXNcbiIsIGksIEVOVl9TSVpFKTsKKwkJcHJpbnRmKCJcbkVudmlyb25tZW50IHNpemU6ICVkLyVsZCBieXRlc1xuIiwKKwkJCWksICh1bG9uZylFTlZfU0laRSk7CiAKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9vbmVuYW5kLmMgYi9jb21tb24vY21kX29uZW5hbmQuYwppbmRleCBhZmYxMWQxLi5jZTk5YTM4IDEwMDY0NAotLS0gYS9jb21tb24vY21kX29uZW5hbmQuYworKysgYi9jb21tb24vY21kX29uZW5hbmQuYwpAQCAtNzAsMTQgKzcwLDE0IEBACiAJCQlpZiAoIWVuZCB8fCBlbmQgPCAwKQogCQkJCWVuZCA9IHN0YXJ0OwogCi0JCQlwcmludGYoIkVyYXNlIGJsb2NrIGZyb20gJWQgdG8gJWRcbiIsIHN0YXJ0LCBlbmQpOworCQkJcHJpbnRmKCJFcmFzZSBibG9jayBmcm9tICVsdSB0byAlbHVcbiIsIHN0YXJ0LCBlbmQpOwogCiAJCQlmb3IgKGJsb2NrID0gc3RhcnQ7IGJsb2NrIDw9IGVuZDsgYmxvY2srKykgewogCQkJCWluc3RyLmFkZHIgPSBibG9jayA8PCBvbmVuYW5kX2NoaXAuZXJhc2Vfc2hpZnQ7CiAJCQkJaW5zdHIubGVuID0gMSA8PCBvbmVuYW5kX2NoaXAuZXJhc2Vfc2hpZnQ7CiAJCQkJcmV0ID0gb25lbmFuZF9lcmFzZSgmb25lbmFuZF9tdGQsICZpbnN0cik7CiAJCQkJaWYgKHJldCkgewotCQkJCQlwcmludGYoImVyYXNlIGZhaWxlZCAlZFxuIiwgYmxvY2spOworCQkJCQlwcmludGYoImVyYXNlIGZhaWxlZCAlbHVcbiIsIGJsb2NrKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9yZWdpbmZvLmMgYi9jb21tb24vY21kX3JlZ2luZm8uYwppbmRleCAxNjY5ZDc0Li4wNjU3ZTRiIDEwMDY0NAotLS0gYS9jb21tb24vY21kX3JlZ2luZm8uYworKysgYi9jb21tb24vY21kX3JlZ2luZm8uYwpAQCAtMjgyLDU0ICsyODIsNTQgQEAKIAlwdXRzICgiXG5NUEM1MjAwIHJlZ2lzdGVyc1xuIik7CiAJcHJpbnRmICgiTUJBUj0lMDh4XG4iLCBDRkdfTUJBUik7CiAJcHV0cyAoIk1lbW9yeSBtYXAgcmVnaXN0ZXJzXG4iKTsKLQlwcmludGYgKCJcdENTMDogc3RhcnQgJTA4WFx0c3RvcCAlMDhYXHRjb25maWcgJTA4WFx0ZW4gJWRcbiIsCisJcHJpbnRmICgiXHRDUzA6IHN0YXJ0ICUwOGxYXHRzdG9wICUwOGxYXHRjb25maWcgJTA4bFhcdGVuICVkXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX0NTMF9TVEFSVCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzBfU1RPUCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzBfQ0ZHLAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDAwMDEwMDAwKSA/IDEgOiAwKTsKLQlwcmludGYgKCJcdENTMTogc3RhcnQgJTA4WFx0c3RvcCAlMDhYXHRjb25maWcgJTA4WFx0ZW4gJWRcbiIsCisJcHJpbnRmICgiXHRDUzE6IHN0YXJ0ICUwOGxYXHRzdG9wICUwOGxYXHRjb25maWcgJTA4bFhcdGVuICVkXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX0NTMV9TVEFSVCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzFfU1RPUCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzFfQ0ZHLAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDAwMDIwMDAwKSA/IDEgOiAwKTsKLQlwcmludGYgKCJcdENTMjogc3RhcnQgJTA4WFx0c3RvcCAlMDhYXHRjb25maWcgJTA4WFx0ZW4gJWRcbiIsCisJcHJpbnRmICgiXHRDUzI6IHN0YXJ0ICUwOGxYXHRzdG9wICUwOGxYXHRjb25maWcgJTA4bFhcdGVuICVkXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX0NTMl9TVEFSVCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzJfU1RPUCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzJfQ0ZHLAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDAwMDQwMDAwKSA/IDEgOiAwKTsKLQlwcmludGYgKCJcdENTMzogc3RhcnQgJTA4WFx0c3RvcCAlMDhYXHRjb25maWcgJTA4WFx0ZW4gJWRcbiIsCisJcHJpbnRmICgiXHRDUzM6IHN0YXJ0ICUwOGxYXHRzdG9wICUwOGxYXHRjb25maWcgJTA4bFhcdGVuICVkXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX0NTM19TVEFSVCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzNfU1RPUCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzNfQ0ZHLAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDAwMDgwMDAwKSA/IDEgOiAwKTsKLQlwcmludGYgKCJcdENTNDogc3RhcnQgJTA4WFx0c3RvcCAlMDhYXHRjb25maWcgJTA4WFx0ZW4gJWRcbiIsCisJcHJpbnRmICgiXHRDUzQ6IHN0YXJ0ICUwOGxYXHRzdG9wICUwOGxYXHRjb25maWcgJTA4bFhcdGVuICVkXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX0NTNF9TVEFSVCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzRfU1RPUCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzRfQ0ZHLAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDAwMTAwMDAwKSA/IDEgOiAwKTsKLQlwcmludGYgKCJcdENTNTogc3RhcnQgJTA4WFx0c3RvcCAlMDhYXHRjb25maWcgJTA4WFx0ZW4gJWRcbiIsCisJcHJpbnRmICgiXHRDUzU6IHN0YXJ0ICUwOGxYXHRzdG9wICUwOGxYXHRjb25maWcgJTA4bFhcdGVuICVkXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX0NTNV9TVEFSVCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzVfU1RPUCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzVfQ0ZHLAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDAwMjAwMDAwKSA/IDEgOiAwKTsKLQlwcmludGYgKCJcdENTNjogc3RhcnQgJTA4WFx0c3RvcCAlMDhYXHRjb25maWcgJTA4WFx0ZW4gJWRcbiIsCisJcHJpbnRmICgiXHRDUzY6IHN0YXJ0ICUwOGxYXHRzdG9wICUwOGxYXHRjb25maWcgJTA4bFhcdGVuICVkXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX0NTNl9TVEFSVCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzZfU1RPUCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzZfQ0ZHLAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDA0MDAwMDAwKSA/IDEgOiAwKTsKLQlwcmludGYgKCJcdENTNzogc3RhcnQgJTA4WFx0c3RvcCAlMDhYXHRjb25maWcgJTA4WFx0ZW4gJWRcbiIsCisJcHJpbnRmICgiXHRDUzc6IHN0YXJ0ICUwOGxYXHRzdG9wICUwOGxYXHRjb25maWcgJTA4bFhcdGVuICVkXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX0NTN19TVEFSVCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzdfU1RPUCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9DUzdfQ0ZHLAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDA4MDAwMDAwKSA/IDEgOiAwKTsKLQlwcmludGYgKCJcdEJPT1RDUzogc3RhcnQgJTA4WFx0c3RvcCAlMDhYXHRjb25maWcgJTA4WFx0ZW4gJWRcbiIsCisJcHJpbnRmICgiXHRCT09UQ1M6IHN0YXJ0ICUwOGxYXHRzdG9wICUwOGxYXHRjb25maWcgJTA4bFhcdGVuICVkXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX0JPT1RDU19TVEFSVCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9CT09UQ1NfU1RPUCwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9CT09UQ1NfQ0ZHLAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDAyMDAwMDAwKSA/IDEgOiAwKTsKLQlwcmludGYgKCJcdFNEUkFNQ1MwOiAlMDhYXG4iLAorCXByaW50ZiAoIlx0U0RSQU1DUzA6ICUwOGxYXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX1NEUkFNX0NTMENGRyk7Ci0JcHJpbnRmICgiXHRTRFJBTUNTMTogJTA4WFxuIiwKKwlwcmludGYgKCJcdFNEUkFNQ1MxOiAlMDhsWFxuIiwKIAkJKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9TRFJBTV9DUzFDRkcpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODZ4eCkKIAltcGM4Nnh4X3JlZ2luZm8oKTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfc2NzaS5jIGIvY29tbW9uL2NtZF9zY3NpLmMKaW5kZXggZTY0OGY3ZC4uZjM1NzQ2NSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9zY3NpLmMKKysrIGIvY29tbW9uL2NtZF9zY3NpLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCWlmKHNjc2lfbWF4X2RldnM+MCkKIAkJc2NzaV9jdXJyX2Rldj0wOwogCWVsc2UKLQkJc2NzaV9jdXJyX2Rldj0tMTsKKwkJc2NzaV9jdXJyX2RldiA9IC0xOwogfQogCiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfdXNiLmMgYi9jb21tb24vY21kX3VzYi5jCmluZGV4IDMwY2FhOTguLmM2MmNhOTcgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfdXNiLmMKKysrIGIvY29tbW9uL2NtZF91c2IuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPHVzYi5oPgogCiAjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFCi1zdGF0aWMgaW50IHVzYl9zdG9yX2N1cnJfZGV2PS0xOyAvKiBjdXJyZW50IGRldmljZSAqLworc3RhdGljIGludCB1c2Jfc3Rvcl9jdXJyX2RldiA9IC0xOyAvKiBjdXJyZW50IGRldmljZSAqLwogI2VuZGlmCiAKIC8qIHNvbWUgZGlzcGxheSByb3V0aW5lcyAoaW5mbyBjb21tYW5kKSAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2RldmljZXMuYyBiL2NvbW1vbi9kZXZpY2VzLmMKaW5kZXggZGRmOGY4ZS4uOWNjOTYzYSAxMDA2NDQKLS0tIGEvY29tbW9uL2RldmljZXMuYworKysgYi9jb21tb24vZGV2aWNlcy5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlkZXZpY2VfdCAqZGV2ID0gTlVMTDsKIAljaGFyIHRlbXBfbmFtZXNbM11bOF07CiAKLQlkZXZfaW5kZXg9LTE7CisJZGV2X2luZGV4ID0gLTE7CiAJZm9yIChpPTE7IGk8PUxpc3ROdW1JdGVtcyhkZXZsaXN0KTsgaSsrKSB7CiAJCWRldiA9IExpc3RHZXRQdHJUb0l0ZW0gKGRldmxpc3QsIGkpOwogCQlpZihzdHJjbXAoZGV2LT5uYW1lLGRldm5hbWUpPT0wKSB7CmRpZmYgLS1naXQgYS9jb21tb24vZW52X29uZW5hbmQuYyBiL2NvbW1vbi9lbnZfb25lbmFuZC5jCmluZGV4IGFjOGE4YzEuLmFkNWIxZDcgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfb25lbmFuZC5jCisrKyBiL2NvbW1vbi9lbnZfb25lbmFuZC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAlpbnN0ci5hZGRyID0gZW52X2FkZHI7CiAJaW5zdHIuYWRkciAtPSAodW5zaWduZWQgbG9uZylvbmVuYW5kX2NoaXAuYmFzZTsKIAlpZiAob25lbmFuZF9lcmFzZSgmb25lbmFuZF9tdGQsICZpbnN0cikpIHsKLQkJcHJpbnRmKCJPbmVOQU5EOiBlcmFzZSBmYWlsZWQgYXQgMHglMDh4XG4iLCBlbnZfYWRkcik7CisJCXByaW50ZigiT25lTkFORDogZXJhc2UgZmFpbGVkIGF0IDB4JTA4bHhcbiIsIGVudl9hZGRyKTsKIAkJcmV0dXJuIDE7CiAJfQogCmRpZmYgLS1naXQgYS9jb21tb24vZmR0X3N1cHBvcnQuYyBiL2NvbW1vbi9mZHRfc3VwcG9ydC5jCmluZGV4IDM4MjgyMjguLjkzYjE0NGUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9mZHRfc3VwcG9ydC5jCisrKyBiL2NvbW1vbi9mZHRfc3VwcG9ydC5jCkBAIC00NDIsMyArNDQyLDkwIEBACiAJCSAgICAgICBwcm9wLCBjb21wYXQsIGZkdF9zdHJlcnJvcihlcnIpKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfSEFTX0ZTTF9EUl9VU0IgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01QQzgzWFgpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1eHgpCisvKgorICogdXBkYXRlIGNyeXB0byBub2RlIHByb3BlcnRpZXMgdG8gYSBzcGVjaWZpZWQgcmV2aXNpb24gb2YgdGhlIFNFQworICogY2FsbGVkIHdpdGggc2VjX3JldiA9PSAwIGlmIG5vdCBvbiBhbiBtcGM4eHh4RSBwcm9jZXNzb3IKKyAqLwordm9pZCBmZHRfZml4dXBfY3J5cHRvX25vZGUodm9pZCAqYmxvYiwgaW50IHNlY19yZXYpCit7CisJY29uc3Qgc3RydWN0IHNlY19yZXZfcHJvcCB7CisJCXUzMiBzZWNfcmV2OworCQl1MzIgbnVtX2NoYW5uZWxzOworCQl1MzIgY2hhbm5lbF9maWZvX2xlbjsKKwkJdTMyIGV4ZWNfdW5pdHNfbWFzazsKKwkJdTMyIGRlc2NyaXB0b3JfdHlwZXNfbWFzazsKKwl9IHNlY19yZXZfcHJvcF9saXN0IFtdID0geworCQl7IDB4MDIwMCwgNCwgMjQsIDB4MDdlLCAweDAxMDEwZWJmIH0sIC8qIFNFQyAyLjAgKi8KKwkJeyAweDAyMDEsIDQsIDI0LCAweDBmZSwgMHgwMTJiMGViZiB9LCAvKiBTRUMgMi4xICovCisJCXsgMHgwMjAyLCAxLCAyNCwgMHgwNGMsIDB4MDEyMjAwM2YgfSwgLyogU0VDIDIuMiAqLworCQl7IDB4MDIwNCwgNCwgMjQsIDB4MDdlLCAweDAxMmIwZWJmIH0sIC8qIFNFQyAyLjQgKi8KKwkJeyAweDAzMDAsIDQsIDI0LCAweDlmZSwgMHgwM2FiMGViZiB9LCAvKiBTRUMgMy4wICovCisJCXsgMHgwMzAzLCA0LCAyNCwgMHg5N2MsIDB4MDNhYjBhYmYgfSwgLyogU0VDIDMuMyAqLworCX07CisJY2hhciBjb21wYXRfc3RybGlzdFtBUlJBWV9TSVpFKHNlY19yZXZfcHJvcF9saXN0KSAqCisJCQkgICAgc2l6ZW9mKCJmc2wsc2VjWC5ZIildOworCWludCBjcnlwdG9fbm9kZSwgc2VjX2lkeCwgZXJyOworCWNoYXIgKnA7CisJdTMyIHZhbDsKKworCS8qIGxvY2F0ZSBjcnlwdG8gbm9kZSBiYXNlZCBvbiBsb3dlc3QgY29tbW9uIGNvbXBhdGlibGUgKi8KKwljcnlwdG9fbm9kZSA9IGZkdF9ub2RlX29mZnNldF9ieV9jb21wYXRpYmxlKGJsb2IsIC0xLCAiZnNsLHNlYzIuMCIpOworCWlmIChjcnlwdG9fbm9kZSA9PSAtRkRUX0VSUl9OT1RGT1VORCkKKwkJcmV0dXJuOworCisJLyogZGVsZXRlIGl0IGlmIG5vdCBvbiBhbiBFLXByb2Nlc3NvciAqLworCWlmIChjcnlwdG9fbm9kZSA+IDAgJiYgIXNlY19yZXYpIHsKKwkJZmR0X2RlbF9ub2RlKGJsb2IsIGNyeXB0b19ub2RlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGVsc2Ugd2UgZ290IGNhbGxlZCBmb3IgcG9zc2libGUgdXByZXYgKi8KKwlmb3IgKHNlY19pZHggPSAwOyBzZWNfaWR4IDwgQVJSQVlfU0laRShzZWNfcmV2X3Byb3BfbGlzdCk7IHNlY19pZHgrKykKKwkJaWYgKHNlY19yZXZfcHJvcF9saXN0W3NlY19pZHhdLnNlY19yZXYgPT0gc2VjX3JldikKKwkJCWJyZWFrOworCisJaWYgKHNlY19pZHggPT0gQVJSQVlfU0laRShzZWNfcmV2X3Byb3BfbGlzdCkpIHsKKwkJcHV0cygid2FybmluZzogdW5rbm93biBTRUMgcmV2aXNpb24gbnVtYmVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXZhbCA9IGNwdV90b19mZHQzMihzZWNfcmV2X3Byb3BfbGlzdFtzZWNfaWR4XS5udW1fY2hhbm5lbHMpOworCWVyciA9IGZkdF9zZXRwcm9wKGJsb2IsIGNyeXB0b19ub2RlLCAiZnNsLG51bS1jaGFubmVscyIsICZ2YWwsIDQpOworCWlmIChlcnIgPCAwKQorCQlwcmludGYoIldBUk5JTkc6IGNvdWxkIG5vdCBzZXQgY3J5cHRvIHByb3BlcnR5OiAlc1xuIiwKKwkJICAgICAgIGZkdF9zdHJlcnJvcihlcnIpKTsKKworCXZhbCA9IGNwdV90b19mZHQzMihzZWNfcmV2X3Byb3BfbGlzdFtzZWNfaWR4XS5kZXNjcmlwdG9yX3R5cGVzX21hc2spOworCWVyciA9IGZkdF9zZXRwcm9wKGJsb2IsIGNyeXB0b19ub2RlLCAiZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayIsICZ2YWwsIDQpOworCWlmIChlcnIgPCAwKQorCQlwcmludGYoIldBUk5JTkc6IGNvdWxkIG5vdCBzZXQgY3J5cHRvIHByb3BlcnR5OiAlc1xuIiwKKwkJICAgICAgIGZkdF9zdHJlcnJvcihlcnIpKTsKKworCXZhbCA9IGNwdV90b19mZHQzMihzZWNfcmV2X3Byb3BfbGlzdFtzZWNfaWR4XS5leGVjX3VuaXRzX21hc2spOworCWVyciA9IGZkdF9zZXRwcm9wKGJsb2IsIGNyeXB0b19ub2RlLCAiZnNsLGV4ZWMtdW5pdHMtbWFzayIsICZ2YWwsIDQpOworCWlmIChlcnIgPCAwKQorCQlwcmludGYoIldBUk5JTkc6IGNvdWxkIG5vdCBzZXQgY3J5cHRvIHByb3BlcnR5OiAlc1xuIiwKKwkJICAgICAgIGZkdF9zdHJlcnJvcihlcnIpKTsKKworCXZhbCA9IGNwdV90b19mZHQzMihzZWNfcmV2X3Byb3BfbGlzdFtzZWNfaWR4XS5jaGFubmVsX2ZpZm9fbGVuKTsKKwllcnIgPSBmZHRfc2V0cHJvcChibG9iLCBjcnlwdG9fbm9kZSwgImZzbCxjaGFubmVsLWZpZm8tbGVuIiwgJnZhbCwgNCk7CisJaWYgKGVyciA8IDApCisJCXByaW50ZigiV0FSTklORzogY291bGQgbm90IHNldCBjcnlwdG8gcHJvcGVydHk6ICVzXG4iLAorCQkgICAgICAgZmR0X3N0cmVycm9yKGVycikpOworCisJdmFsID0gMDsKKwl3aGlsZSAoc2VjX2lkeCA+PSAwKSB7CisJCXAgPSBjb21wYXRfc3RybGlzdCArIHZhbDsKKwkJdmFsICs9IHNwcmludGYocCwgImZzbCxzZWMlZC4lZCIsCisJCQkoc2VjX3Jldl9wcm9wX2xpc3Rbc2VjX2lkeF0uc2VjX3JldiAmIDB4ZmYwMCkgPj4gOCwKKwkJCXNlY19yZXZfcHJvcF9saXN0W3NlY19pZHhdLnNlY19yZXYgJiAweDAwZmYpICsgMTsKKwkJc2VjX2lkeC0tOworCX0KKwllcnIgPSBmZHRfc2V0cHJvcChibG9iLCBjcnlwdG9fbm9kZSwgImNvbXBhdGlibGUiLCAmY29tcGF0X3N0cmxpc3QsIHZhbCk7CisJaWYgKGVyciA8IDApCisJCXByaW50ZigiV0FSTklORzogY291bGQgbm90IHNldCBjcnlwdG8gcHJvcGVydHk6ICVzXG4iLAorCQkgICAgICAgZmR0X3N0cmVycm9yKGVycikpOworfQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01QQzgzWFgpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1eHgpICovCmRpZmYgLS1naXQgYS9jb21tb24vZmxhc2guYyBiL2NvbW1vbi9mbGFzaC5jCmluZGV4IDg4OGZmOWMuLmZlMzlkNTUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9mbGFzaC5jCisrKyBiL2NvbW1vbi9mbGFzaC5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlmbGFzaF9pbmZvX3QgKmluZm87CiAJaW50IGk7CiAKLQlmb3IgKGk9MCwgaW5mbz0mZmxhc2hfaW5mb1swXTsgaTxDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2ksICsraW5mbykgeworCWZvciAoaT0wLCBpbmZvID0gJmZsYXNoX2luZm9bMF07IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpLCArK2luZm8pIHsKIAkJaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04gJiYKIAkJICAgIGFkZHIgPj0gaW5mby0+c3RhcnRbMF0gJiYKIAkJICAgIC8qIFdBUk5JTkcgLSBUaGUgJy0gMScgaXMgbmVlZGVkIGlmIHRoZSBmbGFzaApkaWZmIC0tZ2l0IGEvY29tbW9uL2h1c2guYyBiL2NvbW1vbi9odXNoLmMKaW5kZXggYjQzZjYxOC4uNzVjMThjZSAxMDA2NDQKLS0tIGEvY29tbW9uL2h1c2guYworKysgYi9jb21tb24vaHVzaC5jCkBAIC05NTMsNyArOTUzLDcgQEAKIAogc3RhdGljIGludCBzdGF0aWNfZ2V0KHN0cnVjdCBpbl9zdHIgKmkpCiB7Ci0JaW50IGNoPSppLT5wKys7CisJaW50IGNoID0gKmktPnArKzsKIAlpZiAoY2g9PSdcMCcpIHJldHVybiBFT0Y7CiAJcmV0dXJuIGNoOwogfQpAQCAtMTEwNCw3ICsxMTA0LDcgQEAKIAljaCA9IDA7CiAJLyogSWYgdGhlcmUgaXMgZGF0YSB3YWl0aW5nLCBlYXQgaXQgdXAgKi8KIAlpZiAoaS0+cCAmJiAqaS0+cCkgewotCQljaD0qaS0+cCsrOworCQljaCA9ICppLT5wKys7CiAJfSBlbHNlIHsKIAkJLyogbmVlZCB0byBkb3VibGUgY2hlY2sgaS0+ZmlsZSBiZWNhdXNlIHdlIG1pZ2h0IGJlIGRvaW5nIHNvbWV0aGluZwogCQkgKiBtb3JlIGNvbXBsaWNhdGVkIGJ5IG5vdywgbGlrZSBzb3VyY2luZyBvciBzdWJzdGl0dXRpbmcuICovCkBAIC0xMTIxLDcgKzExMjEsNyBAQAogCQkJaS0+X19wcm9tcHRtZSA9IDA7CiAjZW5kaWYKIAkJCWlmIChpLT5wICYmICppLT5wKSB7Ci0JCQkJY2g9KmktPnArKzsKKwkJCQljaCA9ICppLT5wKys7CiAJCQl9CiAjaWZuZGVmIF9fVV9CT09UX18KIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2NvbW1vbi9pbWFnZS5jIGIvY29tbW9uL2ltYWdlLmMKaW5kZXggZGRkOWU4Yi4uNTM1YzMwMiAxMDA2NDQKLS0tIGEvY29tbW9uL2ltYWdlLmMKKysrIGIvY29tbW9uL2ltYWdlLmMKQEAgLTgyNywxMyArODI3LDEzIEBACiAJCQljZmdfbm9mZnNldCA9IGZpdF9jb25mX2dldF9ub2RlIChmaXRfaGRyLCBmaXRfdW5hbWVfY29uZmlnKTsKIAkJCWlmIChjZmdfbm9mZnNldCA8IDApIHsKIAkJCQlkZWJ1ZyAoIiogIHJhbWRpc2s6IG5vIHN1Y2ggY29uZmlnXG4iKTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gMTsKIAkJCX0KIAogCQkJcmRfbm9mZnNldCA9IGZpdF9jb25mX2dldF9yYW1kaXNrX25vZGUgKGZpdF9oZHIsIGNmZ19ub2Zmc2V0KTsKIAkJCWlmIChyZF9ub2Zmc2V0IDwgMCkgewogCQkJCWRlYnVnICgiKiAgcmFtZGlzazogbm8gcmFtZGlzayBpbiBjb25maWdcbiIpOwotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAxOwogCQkJfQogCQl9CiAjZW5kaWYKQEAgLTg3Miw3ICs4NzIsNyBAQAogCQkJaWYgKCFmaXRfY2hlY2tfZm9ybWF0IChmaXRfaGRyKSkgewogCQkJCXB1dHMgKCJCYWQgRklUIHJhbWRpc2sgaW1hZ2UgZm9ybWF0IVxuIik7CiAJCQkJc2hvd19ib290X3Byb2dyZXNzICgtMTIwKTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJCXNob3dfYm9vdF9wcm9ncmVzcyAoMTIxKTsKIApAQCAtODg3LDcgKzg4Nyw3IEBACiAJCQkJaWYgKGNmZ19ub2Zmc2V0IDwgMCkgewogCQkJCQlwdXRzICgiQ291bGQgbm90IGZpbmQgY29uZmlndXJhdGlvbiBub2RlXG4iKTsKIAkJCQkJc2hvd19ib290X3Byb2dyZXNzICgtMTIyKTsKLQkJCQkJcmV0dXJuIDA7CisJCQkJCXJldHVybiAxOwogCQkJCX0KIAkJCQlmaXRfdW5hbWVfY29uZmlnID0gZmR0X2dldF9uYW1lIChmaXRfaGRyLCBjZmdfbm9mZnNldCwgTlVMTCk7CiAJCQkJcHJpbnRmICgiICAgVXNpbmcgJyVzJyBjb25maWd1cmF0aW9uXG4iLCBmaXRfdW5hbWVfY29uZmlnKTsKQEAgLTkwMiwyMCArOTAyLDIwIEBACiAJCQlpZiAocmRfbm9mZnNldCA8IDApIHsKIAkJCQlwdXRzICgiQ291bGQgbm90IGZpbmQgc3ViaW1hZ2Ugbm9kZVxuIik7CiAJCQkJc2hvd19ib290X3Byb2dyZXNzICgtMTI0KTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gMTsKIAkJCX0KIAogCQkJcHJpbnRmICgiICAgVHJ5aW5nICclcycgcmFtZGlzayBzdWJpbWFnZVxuIiwgZml0X3VuYW1lX3JhbWRpc2spOwogCiAJCQlzaG93X2Jvb3RfcHJvZ3Jlc3MgKDEyNSk7CiAJCQlpZiAoIWZpdF9jaGVja19yYW1kaXNrIChmaXRfaGRyLCByZF9ub2Zmc2V0LCBhcmNoLCBpbWFnZXMtPnZlcmlmeSkpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIDE7CiAKIAkJCS8qIGdldCByYW1kaXNrIGltYWdlIGRhdGEgYWRkcmVzcyBhbmQgbGVuZ3RoICovCiAJCQlpZiAoZml0X2ltYWdlX2dldF9kYXRhIChmaXRfaGRyLCByZF9ub2Zmc2V0LCAmZGF0YSwgJnNpemUpKSB7CiAJCQkJcHV0cyAoIkNvdWxkIG5vdCBmaW5kIHJhbWRpc2sgc3ViaW1hZ2UgZGF0YSFcbiIpOwogCQkJCXNob3dfYm9vdF9wcm9ncmVzcyAoLTEyNyk7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlzaG93X2Jvb3RfcHJvZ3Jlc3MgKDEyOCk7CiAKQEAgLTkyNSw3ICs5MjUsNyBAQAogCQkJaWYgKGZpdF9pbWFnZV9nZXRfbG9hZCAoZml0X2hkciwgcmRfbm9mZnNldCwgJnJkX2xvYWQpKSB7CiAJCQkJcHV0cyAoIkNhbid0IGdldCByYW1kaXNrIHN1YmltYWdlIGxvYWQgYWRkcmVzcyFcbiIpOwogCQkJCXNob3dfYm9vdF9wcm9ncmVzcyAoLTEyOSk7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlzaG93X2Jvb3RfcHJvZ3Jlc3MgKDEyOSk7CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9sY2QuYyBiL2NvbW1vbi9sY2QuYwppbmRleCBlYmYzNzdhLi5lZWMxZjUzIDEwMDY0NAotLS0gYS9jb21tb24vbGNkLmMKKysrIGIvY29tbW9uL2xjZC5jCkBAIC01MzksNyArNTM5LDcgQEAKIAogCWRlYnVnICgiTG9nbzogd2lkdGggJWQgIGhlaWdodCAlZCAgY29sb3JzICVkICBjbWFwICVkXG4iLAogCQlCTVBfTE9HT19XSURUSCwgQk1QX0xPR09fSEVJR0hULCBCTVBfTE9HT19DT0xPUlMsCi0JCXNpemVvZihibXBfbG9nb19wYWxldHRlKS8oc2l6ZW9mKHVzaG9ydCkpKTsKKwkJKGludCkoc2l6ZW9mKGJtcF9sb2dvX3BhbGV0dGUpLyhzaXplb2YodXNob3J0KSkpKTsKIAogCWJtYXAgPSAmYm1wX2xvZ29fYml0bWFwWzBdOwogCWZiICAgPSAodWNoYXIgKikobGNkX2Jhc2UgKyB5ICogbGNkX2xpbmVfbGVuZ3RoICsgeCk7CkBAIC03MjgsNyArNzI4LDcgQEAKIAkJV0FUQ0hET0dfUkVTRVQoKTsKIAkJZm9yIChqID0gMDsgaiA8IHdpZHRoIDsgaisrKQogI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1MCkKLQkJCSooZmIrKyk9KihibWFwKyspOworCQkJKihmYisrKSA9ICooYm1hcCsrKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX01QQzgyMykgfHwgZGVmaW5lZChDT05GSUdfTUNDMjAwKQogCQkJKihmYisrKT0yNTUtKihibWFwKyspOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jb21tb24vdXNiLmMgYi9jb21tb24vdXNiLmMKaW5kZXggYTAxMDdkYy4uYTQ1ZDExMyAxMDA2NDQKLS0tIGEvY29tbW9uL3VzYi5jCisrKyBiL2NvbW1vbi91c2IuYwpAQCAtMjUyLDcgKzI1Miw3IEBACiAKIAlmb3IoaT0wOyBpPGRldi0+Y29uZmlnLmJOdW1JbnRlcmZhY2VzO2krKykgewogCQlmb3IoaWk9MDsgaWk8ZGV2LT5jb25maWcuaWZfZGVzY1tpXS5iTnVtRW5kcG9pbnRzOyBpaSsrKSB7Ci0JCQllcD0mZGV2LT5jb25maWcuaWZfZGVzY1tpXS5lcF9kZXNjW2lpXTsKKwkJCWVwID0gJmRldi0+Y29uZmlnLmlmX2Rlc2NbaV0uZXBfZGVzY1tpaV07CiAJCQliPWVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOwogCiAJCQlpZigoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKT09VVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkgewkvKiBDb250cm9sID0+IGJpZGlyZWN0aW9uYWwgKi8KQEAgLTYyNyw3ICs2MjcsNyBAQAogCWlmIChzaXplIDw9IDAgfHwgIWJ1ZiB8fCAhaW5kZXgpCiAJCXJldHVybiAtMTsKIAlidWZbMF0gPSAwOwotCXRidWY9Jm15YnVmWzBdOworCXRidWYgPSAmbXlidWZbMF07CiAKIAkvKiBnZXQgbGFuZ2lkIGZvciBzdHJpbmdzIGlmIGl0J3Mgbm90IHlldCBrbm93biAqLwogCWlmICghZGV2LT5oYXZlX2xhbmdpZCkgewpAQCAtODU3LDcgKzg1Nyw3IEBACiAJLyogZmlyc3QgbWFrZSBhbGwgZGV2aWNlcyB1bmtub3duICovCiAJZm9yKGk9MDtpPFVTQl9NQVhfREVWSUNFO2krKykgewogCQltZW1zZXQoJnVzYl9kZXZbaV0sMCxzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2UpKTsKLQkJdXNiX2RldltpXS5kZXZudW09LTE7CisJCXVzYl9kZXZbaV0uZGV2bnVtID0gLTE7CiAJfQogCWRldl9pbmRleD0wOwogCS8qIGRldmljZSAwIGlzIGFsd2F5cyBwcmVzZW50IChyb290IGh1Yiwgc28gbGV0IGl0IGFuYWx5emUpICovCmRpZmYgLS1naXQgYS9jb21tb24vdXNiX2tiZC5jIGIvY29tbW9uL3VzYl9rYmQuYwppbmRleCAxZTc5MjA4Li5jODc2NDk1IDEwMDY0NAotLS0gYS9jb21tb24vdXNiX2tiZC5jCisrKyBiL2NvbW1vbi91c2Jfa2JkLmMKQEAgLTczMCw4ICs3MzAsOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCXByaW50ZigiIHJlcG9ydCBkZXNjcmlwdG9yIChzaXplICV1LCByZWFkICVkKVxuIiwgbGVuLCBpbmRleCk7Ci0Jc3RhcnQ9JmJ1ZmZlclswXTsKLQllbmQ9JmJ1ZmZlcltsZW5dOworCXN0YXJ0ID0gJmJ1ZmZlclswXTsKKwllbmQgPSAmYnVmZmVyW2xlbl07CiAJaT0wOwogCWRvIHsKIAkJaW5kZXg9ZmV0Y2hfaXRlbShzdGFydCxlbmQsJml0ZW0pOwpkaWZmIC0tZ2l0IGEvY29tbW9uL3VzYl9zdG9yYWdlLmMgYi9jb21tb24vdXNiX3N0b3JhZ2UuYwppbmRleCAzZTExM2I0Li5kOGZiYjY5IDEwMDY0NAotLS0gYS9jb21tb24vdXNiX3N0b3JhZ2UuYworKysgYi9jb21tb24vdXNiX3N0b3JhZ2UuYwpAQCAtNzMxLDcgKzczMSw3IEBACiAJY2NiIHJlcXNyYjsKIAlpbnQgcmV0cnksbm90cmVhZHk7CiAKLQlwc3JiPSZyZXFzcmI7CisJcHNyYiA9ICZyZXFzcmI7CiAJc3RhdHVzPVVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogCXJldHJ5PTA7CiAJbm90cmVhZHk9MDsKQEAgLTc3Niw3ICs3NzYsNyBAQAogCXBzcmItPmNtZFsxXT1zcmItPmx1bjw8NTsKIAlwc3JiLT5jbWRbNF09MTg7CiAJcHNyYi0+ZGF0YWxlbj0xODsKLQlwc3JiLT5wZGF0YT0mc3JiLT5zZW5zZV9idWZbMF07CisJcHNyYi0+cGRhdGEgPSAmc3JiLT5zZW5zZV9idWZbMF07CiAJcHNyYi0+Y21kbGVuPTEyOwogCS8qIGlzc3VlIHRoZSBjb21tYW5kICovCiAJcmVzdWx0PXVzYl9zdG9yX0NCX2NvbWRhdChwc3JiLHVzKTsKQEAgLTg1OCw3ICs4NTgsNyBAQAogCXNyYi0+Y21kWzFdPXNyYi0+bHVuPDw1OwogCXNyYi0+Y21kWzRdPTE4OwogCXNyYi0+ZGF0YWxlbj0xODsKLQlzcmItPnBkYXRhPSZzcmItPnNlbnNlX2J1ZlswXTsKKwlzcmItPnBkYXRhID0gJnNyYi0+c2Vuc2VfYnVmWzBdOwogCXNyYi0+Y21kbGVuPTEyOwogCXNzLT50cmFuc3BvcnQoc3JiLHNzKTsKIAlVU0JfU1RPUl9QUklOVEYoIlJlcXVlc3QgU2Vuc2UgcmV0dXJuZWQgJTAyWCAlMDJYICUwMlhcbiIsc3JiLT5zZW5zZV9idWZbMl0sc3JiLT5zZW5zZV9idWZbMTJdLHNyYi0+c2Vuc2VfYnVmWzEzXSk7CmRpZmYgLS1naXQgYS9jcHUvYXJtOTI2ZWpzL2NwdS5jIGIvY3B1L2FybTkyNmVqcy9jcHUuYwppbmRleCA3MjI3MzJlLi41NmM2Mjg5IDEwMDY0NAotLS0gYS9jcHUvYXJtOTI2ZWpzL2NwdS5jCisrKyBiL2NwdS9hcm05MjZlanMvY3B1LmMKQEAgLTEzNCwyNSArMTM0LDUyIEBACiAJcmV0dXJuICgwKTsKIH0KIAotdm9pZCBpY2FjaGVfZW5hYmxlICh2b2lkKQorLyogY2FjaGVfYml0IG11c3QgYmUgZWl0aGVyIEMxX0lDIG9yIEMxX0RDICovCitzdGF0aWMgdm9pZCBjYWNoZV9lbmFibGUodWludDMyX3QgY2FjaGVfYml0KQogewotCXVsb25nIHJlZzsKKwl1aW50MzJfdCByZWc7CiAKLQlyZWcgPSByZWFkX3AxNV9jMSAoKTsJCS8qIGdldCBjb250cm9sIHJlZy4gKi8KLQljcF9kZWxheSAoKTsKLQl3cml0ZV9wMTVfYzEgKHJlZyB8IEMxX0lDKTsKKwlyZWcgPSByZWFkX3AxNV9jMSgpOwkvKiBnZXQgY29udHJvbCByZWcuICovCisJY3BfZGVsYXkoKTsKKwl3cml0ZV9wMTVfYzEocmVnIHwgY2FjaGVfYml0KTsKIH0KIAotdm9pZCBpY2FjaGVfZGlzYWJsZSAodm9pZCkKKy8qIGNhY2hlX2JpdCBtdXN0IGJlIGVpdGhlciBDMV9JQyBvciBDMV9EQyAqLworc3RhdGljIHZvaWQgY2FjaGVfZGlzYWJsZSh1aW50MzJfdCBjYWNoZV9iaXQpCiB7Ci0JdWxvbmcgcmVnOworCXVpbnQzMl90IHJlZzsKIAotCXJlZyA9IHJlYWRfcDE1X2MxICgpOwotCWNwX2RlbGF5ICgpOwotCXdyaXRlX3AxNV9jMSAocmVnICYgfkMxX0lDKTsKKwlyZWcgPSByZWFkX3AxNV9jMSgpOworCWNwX2RlbGF5KCk7CisJd3JpdGVfcDE1X2MxKHJlZyAmIH5jYWNoZV9iaXQpOwogfQogCi1pbnQgaWNhY2hlX3N0YXR1cyAodm9pZCkKK3ZvaWQgaWNhY2hlX2VuYWJsZSh2b2lkKQogewotCXJldHVybiAocmVhZF9wMTVfYzEgKCkgJiBDMV9JQykgIT0gMDsKKwljYWNoZV9lbmFibGUoQzFfSUMpOworfQorCit2b2lkIGljYWNoZV9kaXNhYmxlKHZvaWQpCit7CisJY2FjaGVfZGlzYWJsZShDMV9JQyk7Cit9CisKK2ludCBpY2FjaGVfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIChyZWFkX3AxNV9jMSgpICYgQzFfSUMpICE9IDA7Cit9CisKK3ZvaWQgZGNhY2hlX2VuYWJsZSh2b2lkKQoreworCWNhY2hlX2VuYWJsZShDMV9EQyk7Cit9CisKK3ZvaWQgZGNhY2hlX2Rpc2FibGUodm9pZCkKK3sKKwljYWNoZV9kaXNhYmxlKEMxX0RDKTsKK30KKworaW50IGRjYWNoZV9zdGF0dXModm9pZCkKK3sKKwlyZXR1cm4gKHJlYWRfcDE1X2MxKCkgJiBDMV9EQykgIT0gMDsKIH0KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjZlanMvZGF2aW5jaS9ldGhlci5jIGIvY3B1L2FybTkyNmVqcy9kYXZpbmNpL2V0aGVyLmMKaW5kZXggZDI4NmVjMC4uNWFlMDM1YiAxMDA2NDQKLS0tIGEvY3B1L2FybTkyNmVqcy9kYXZpbmNpL2V0aGVyLmMKKysrIGIvY3B1L2FybTkyNmVqcy9kYXZpbmNpL2V0aGVyLmMKQEAgLTM1Nyw2ICszNTcsOCBAQAogCQkJcGh5LmF1dG9fbmVnb3RpYXRlID0gZ2VuX2F1dG9fbmVnb3RpYXRlOwogCX0KIAorCXByaW50ZigiRXRoZXJuZXQgUEhZOiAlc1xuIiwgcGh5Lm5hbWUpOworCiAJcmV0dXJuKDEpOwogfQogCmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9zZXJpYWwuYyBiL2NwdS9pMzg2L3NlcmlhbC5jCmluZGV4IGJhZjM1ZTUuLjhiNWY4ZmEgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3NlcmlhbC5jCisrKyBiL2NwdS9pMzg2L3NlcmlhbC5jCkBAIC00MTMsOCArNDEzLDggQEAKIAkgKiBJbml0IG9uYm9hcmQgMTY1NTAgVUFSVAogCSAqLwogCW91dGIoMHg4MCwgVUFSVDFfQkFTRSArIFVBUlRfTENSKTsJLyogc2V0IERMQUIgYml0ICovCi0Jb3V0YihiZGl2ICYgMHhmZiksIFVBUlQxX0JBU0UgKyBVQVJUX0RMTCk7CS8qIHNldCBkaXZpc29yIGZvciA5NjAwIGJhdWQgKi8KLQlvdXRiKGJkaXYgPj4gOCksIFVBUlQxX0JBU0UgKyBVQVJUX0RMTSk7CS8qIHNldCBkaXZpc29yIGZvciA5NjAwIGJhdWQgKi8KKwlvdXRiKChiZGl2ICYgMHhmZiksIFVBUlQxX0JBU0UgKyBVQVJUX0RMTCk7CS8qIHNldCBkaXZpc29yIGZvciA5NjAwIGJhdWQgKi8KKwlvdXRiKChiZGl2ID4+IDggICksIFVBUlQxX0JBU0UgKyBVQVJUX0RMTSk7CS8qIHNldCBkaXZpc29yIGZvciA5NjAwIGJhdWQgKi8KIAlvdXRiKDB4MDMsIFVBUlQxX0JBU0UgKyBVQVJUX0xDUik7CS8qIGxpbmUgY29udHJvbCA4IGJpdHMgbm8gcGFyaXR5ICovCiAJb3V0YigweDAwLCBVQVJUMV9CQVNFICsgVUFSVF9GQ1IpOwkvKiBkaXNhYmxlIEZJRk8gKi8KIAlvdXRiKDB4MDAsIFVBUlQxX0JBU0UgKyBVQVJUX01DUik7CS8qIG5vIG1vZGVtIGNvbnRyb2wgRFRSIFJUUyAqLwpkaWZmIC0tZ2l0IGEvY3B1L2l4cC9ucGUvbnBlLmMgYi9jcHUvaXhwL25wZS9ucGUuYwppbmRleCBhMzNiOTU2Li44OTIwOTZiIDEwMDY0NAotLS0gYS9jcHUvaXhwL25wZS9ucGUuYworKysgYi9jcHUvaXhwL25wZS9ucGUuYwpAQCAtNjcsNyArNjcsNyBAQAogCQlwID0gbnBlX2FsbG9jX2ZyZWU7CiAJCW5wZV9hbGxvY19mcmVlICs9IHNpemU7CiAJfSBlbHNlIHsKLQkJcHJpbnRmKCIlczogZmFpbGVkIChjb3VudD0lZCwgc2l6ZT0lZCkhXG4iLCBjb3VudCwgc2l6ZSk7CisJCXByaW50ZigibnBlX2FsbG9jOiBmYWlsZWQgKGNvdW50PSVkLCBzaXplPSVkKSFcbiIsIGNvdW50LCBzaXplKTsKIAl9CiAJcmV0dXJuIHA7CiB9CmRpZmYgLS1naXQgYS9jcHUvbWNmNTIyN3gvY3B1X2luaXQuYyBiL2NwdS9tY2Y1MjI3eC9jcHVfaW5pdC5jCmluZGV4IDcxYjA1M2QuLmNmMjk1NTkgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1MjI3eC9jcHVfaW5pdC5jCisrKyBiL2NwdS9tY2Y1MjI3eC9jcHVfaW5pdC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAqLwogaW50IGNwdV9pbml0X3Iodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTUNGVE1SCisjaWZkZWYgQ09ORklHX01DRlJUQwogCXZvbGF0aWxlIHJ0Y190ICpydGMgPSAodm9sYXRpbGUgcnRjX3QgKikoQ0ZHX01DRlJUQ19CQVNFKTsKIAl2b2xhdGlsZSBydGNleF90ICpydGNleCA9ICh2b2xhdGlsZSBydGNleF90ICopJnJ0Yy0+ZXh0ZW5kZWQ7CiAJdTMyIG9zY2lsbGF0b3IgPSBDRkdfUlRDX09TQ0lMTEFUT1I7CmRpZmYgLS1naXQgYS9jcHUvbWNmNTJ4Mi9jcHVfaW5pdC5jIGIvY3B1L21jZjUyeDIvY3B1X2luaXQuYwppbmRleCAyMDdhMzdlLi4zNDRiY2VlIDEwMDY0NAotLS0gYS9jcHUvbWNmNTJ4Mi9jcHVfaW5pdC5jCisrKyBiL2NwdS9tY2Y1MngyL2NwdV9pbml0LmMKQEAgLTQxOSw4ICs0MTksNyBAQAogCSAgIGVsc2UgaXMgZG9pbmcgaXQhICovCiAKICNpZiBkZWZpbmVkKENGR19DUzBfQkFTRSkgJiBkZWZpbmVkKENGR19DUzBfU0laRSkgJiBcCi0gICAgZGVmaW5lZChDRkdfQ1MwX1dJRFRIKSAmIGRlZmluZWQoQ0ZHX0NTMF9STykgJiBcCi0JZGVmaW5lZChDRkdfQ1MwX1dTKQorICAgIGRlZmluZWQoQ0ZHX0NTMF9XSURUSCkgJiBkZWZpbmVkKENGR19DUzBfV1MpCiAKIAlNQ0ZDU01fQ1NBUjAgPSAoQ0ZHX0NTMF9CQVNFID4+IDE2KSAmIDB4RkZGRjsKIApAQCAtNDQ3LDggKzQ0Niw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ0ZHX0NTMV9CQVNFKSAmIGRlZmluZWQoQ0ZHX0NTMV9TSVpFKSAmIFwKLSAgICBkZWZpbmVkKENGR19DUzFfV0lEVEgpICYgZGVmaW5lZChDRkdfQ1MxX1JPKSAmIFwKLQlkZWZpbmVkKENGR19DUzFfV1MpCisgICAgZGVmaW5lZChDRkdfQ1MxX1dJRFRIKSAmIGRlZmluZWQoQ0ZHX0NTMV9XUykKIAogCU1DRkNTTV9DU0FSMSA9IChDRkdfQ1MxX0JBU0UgPj4gMTYpICYgMHhGRkZGOwogCkBAIC00NzYsOCArNDc0LDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDRkdfQ1MyX0JBU0UpICYgZGVmaW5lZChDRkdfQ1MyX1NJWkUpICYgXAotICAgIGRlZmluZWQoQ0ZHX0NTMl9XSURUSCkgJiBkZWZpbmVkKENGR19DUzJfUk8pICYgXAotCWRlZmluZWQoQ0ZHX0NTMl9XUykKKyAgICBkZWZpbmVkKENGR19DUzJfV0lEVEgpICYgZGVmaW5lZChDRkdfQ1MyX1dTKQogCiAJTUNGQ1NNX0NTQVIyID0gKENGR19DUzJfQkFTRSA+PiAxNikgJiAweEZGRkY7CiAKQEAgLTUwNSw4ICs1MDIsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENGR19DUzNfQkFTRSkgJiBkZWZpbmVkKENGR19DUzNfU0laRSkgJiBcCi0gICAgZGVmaW5lZChDRkdfQ1MzX1dJRFRIKSAmIGRlZmluZWQoQ0ZHX0NTM19STykgJiBcCi0JZGVmaW5lZChDRkdfQ1MzX1dTKQorICAgIGRlZmluZWQoQ0ZHX0NTM19XSURUSCkgJiBkZWZpbmVkKENGR19DUzNfV1MpCiAKIAlNQ0ZDU01fQ1NBUjMgPSAoQ0ZHX0NTM19CQVNFID4+IDE2KSAmIDB4RkZGRjsKIApkaWZmIC0tZ2l0IGEvY3B1L21jZjUyeDIvc3BlZWQuYyBiL2NwdS9tY2Y1MngyL3NwZWVkLmMKaW5kZXggNWZhZmNkOC4uZjZlZGQ1YiAxMDA2NDQKLS0tIGEvY3B1L21jZjUyeDIvc3BlZWQuYworKysgYi9jcHUvbWNmNTJ4Mi9zcGVlZC5jCkBAIC02OSw3ICs2OSw3IEBACiAKIAkvKiBTZXR1cCBQTEwgKi8KIAlwbGwtPnN5bmNyID0gMHgwMTA4MDAwMDsKLQl3aGlsZSAoIShwbGwtPnN5bnNyICYgRk1QTExfU1lOU1JfTE9DSykKKwl3aGlsZSAoIShwbGwtPnN5bnNyICYgRk1QTExfU1lOU1JfTE9DSykpCiAJCTsKIAlwbGwtPnN5bmNyID0gMHgwMTAwMDAwMDsKIAl3aGlsZSAoIShwbGwtPnN5bnNyICYgRk1QTExfU1lOU1JfTE9DSykpCmRpZmYgLS1naXQgYS9jcHUvbWNmNTQ0NXgvY29uZmlnLm1rIGIvY3B1L21jZjU0NDV4L2NvbmZpZy5tawppbmRleCA4ODQzM2YyLi42N2VmYTA3IDEwMDY0NAotLS0gYS9jcHUvbWNmNTQ0NXgvY29uZmlnLm1rCisrKyBiL2NwdS9tY2Y1NDQ1eC9jb25maWcubWsKQEAgLTI5LDMgKzI5LDkgQEAKIGVsc2UKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1tNTQwNyAtZlBJQwogZW5kaWYKKworaWZuZXEgKCwkKGZpbmRzdHJpbmcgLWxpbnV4LSwkKHNoZWxsICQoQ0MpIC0tdmVyc2lvbikpKQoraWZuZXEgKCwkKGZpbmRzdHJpbmcgR09ULCQoc2hlbGwgJChMRCkgLS1oZWxwKSkpCitQTEFURk9STV9MREZMQUdTICs9IC0tZ290PXNpbmdsZQorZW5kaWYKK2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbWNmNTQ0NXgvY3B1X2luaXQuYyBiL2NwdS9tY2Y1NDQ1eC9jcHVfaW5pdC5jCmluZGV4IDU4NTIxNmQuLmUwNzc0OGIgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1NDQ1eC9jcHVfaW5pdC5jCisrKyBiL2NwdS9tY2Y1NDQ1eC9jcHVfaW5pdC5jCkBAIC0xMTAsNyArMTEwLDcgQEAKICAqLwogaW50IGNwdV9pbml0X3Iodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTUNGVE1SCisjaWZkZWYgQ09ORklHX01DRlJUQwogCXZvbGF0aWxlIHJ0Y190ICpydGMgPSAodm9sYXRpbGUgcnRjX3QgKikoQ0ZHX01DRlJUQ19CQVNFKTsKIAl2b2xhdGlsZSBydGNleF90ICpydGNleCA9ICh2b2xhdGlsZSBydGNleF90ICopJnJ0Yy0+ZXh0ZW5kZWQ7CiAKZGlmZiAtLWdpdCBhL2NwdS9tY2Y1NDQ1eC9zdGFydC5TIGIvY3B1L21jZjU0NDV4L3N0YXJ0LlMKaW5kZXggMzI0MWIyNy4uODllYzdiYyAxMDA2NDQKLS0tIGEvY3B1L21jZjU0NDV4L3N0YXJ0LlMKKysrIGIvY3B1L21jZjU0NDV4L3N0YXJ0LlMKQEAgLTI1Myw3ICsyNTMsNyBAQAogLyogZXhjZXB0aW9uIGNvZGUgKi8KIAkuZ2xvYmwgX2ZhdWx0CiBfZmF1bHQ6Ci0Jam1wIF9mYXVsdAorCWJyYSBfZmF1bHQKIAkuZ2xvYmwJX2V4Y19oYW5kbGVyCiAKIF9leGNfaGFuZGxlcjoKZGlmZiAtLWdpdCBhL2NwdS9tY2Y1NDd4Xzh4L2NvbmZpZy5tayBiL2NwdS9tY2Y1NDd4Xzh4L2NvbmZpZy5tawppbmRleCBlNWY0Mzg1Li41NjdiMjgxIDEwMDY0NAotLS0gYS9jcHUvbWNmNTQ3eF84eC9jb25maWcubWsKKysrIGIvY3B1L21jZjU0N3hfOHgvY29uZmlnLm1rCkBAIC0yOSwzICsyOSw5IEBACiBlbHNlCiBQTEFURk9STV9DUFBGTEFHUyArPSAtbTU0MDcgLWZQSUMKIGVuZGlmCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIC1saW51eC0sJChzaGVsbCAkKENDKSAtLXZlcnNpb24pKSkKK2lmbmVxICgsJChmaW5kc3RyaW5nIEdPVCwkKHNoZWxsICQoTEQpIC0taGVscCkpKQorUExBVEZPUk1fTERGTEFHUyArPSAtLWdvdD1zaW5nbGUKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21jZjU0N3hfOHgvc3RhcnQuUyBiL2NwdS9tY2Y1NDd4Xzh4L3N0YXJ0LlMKaW5kZXggOGI4NzA4ZC4uODczNTVmOSAxMDA2NDQKLS0tIGEvY3B1L21jZjU0N3hfOHgvc3RhcnQuUworKysgYi9jcHUvbWNmNTQ3eF84eC9zdGFydC5TCkBAIC0yNTksNyArMjU5LDcgQEAKIC8qIGV4Y2VwdGlvbiBjb2RlICovCiAJLmdsb2JsIF9mYXVsdAogX2ZhdWx0OgotCWptcCBfZmF1bHQKKwlicmEgX2ZhdWx0CiAJLmdsb2JsCV9leGNfaGFuZGxlcgogCiBfZXhjX2hhbmRsZXI6CmRpZmYgLS1naXQgYS9jcHUvbWljcm9ibGF6ZS9pbnRlcnJ1cHRzLmMgYi9jcHUvbWljcm9ibGF6ZS9pbnRlcnJ1cHRzLmMKaW5kZXggM2YwNGIyOS4uMjZlODhjYiAxMDA2NDQKLS0tIGEvY3B1L21pY3JvYmxhemUvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9taWNyb2JsYXplL2ludGVycnVwdHMuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQ0ZHX0lOVENfMF9OVU07IGkrKykgewogCQlpZiAoYWN0LT5oYW5kbGVyICE9IChpbnRlcnJ1cHRfaGFuZGxlcl90KikgZGVmX2hkbHIpIHsKLQkJCXByaW50ZiAoIiUwMmQgICUwOGx4ICAlMDhseCAgJWRcbiIsIGksCisJCQlwcmludGYgKCIlMDJkICAlMDh4ICAlMDh4ICAlZFxuIiwgaSwKIAkJCQkoaW50KWFjdC0+aGFuZGxlciwgKGludClhY3QtPmFyZywgYWN0LT5jb3VudCk7CiAJCX0KIAkJYWN0Kys7CmRpZmYgLS1naXQgYS9jcHUvbXBjNTEyeC9jcHUuYyBiL2NwdS9tcGM1MTJ4L2NwdS5jCmluZGV4IGJlZDc3YWMuLmI1OWYzNmQgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1MTJ4L2NwdS5jCisrKyBiL2NwdS9tcGM1MTJ4L2NwdS5jCkBAIC0xMzMsOCArMTMzLDkgQEAKICNpZmRlZiBDT05GSUdfT0ZfTElCRkRUCiB2b2lkIGZ0X2NwdV9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKIHsKLQljaGFyICogY3B1X3BhdGggPSAiL2NwdXMvIiBPRl9DUFU7Ci0JY2hhciAqIGV0aF9wYXRoID0gIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI4MDAiOworCWNoYXIgKmNwdV9wYXRoID0gIi9jcHVzLyIgT0ZfQ1BVOworCWNoYXIgKmV0aF9wYXRoID0gIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI4MDAiOworCWNoYXIgKmV0aF9wYXRoX29sZCA9ICIvIiBPRl9TT0NfT0xEICIvZXRoZXJuZXRAMjgwMCI7CiAKIAlkb19maXh1cF9ieV9wYXRoX3UzMihibG9iLCBjcHVfcGF0aCwgInRpbWViYXNlLWZyZXF1ZW5jeSIsIE9GX1RCQ0xLLCAxKTsKIAlkb19maXh1cF9ieV9wYXRoX3UzMihibG9iLCBjcHVfcGF0aCwgImJ1cy1mcmVxdWVuY3kiLCBiZC0+YmlfYnVzZnJlcSwgMSk7CkBAIC0xNDQsNSArMTQ1LDggQEAKIAogCS8qIHRoaXMgaXMgc28gb2xkIGtlcm5lbHMgd2l0aCBvbGQgZGV2aWNlIHRyZWVzIHdpbGwgYm9vdCAqLwogCWRvX2ZpeHVwX2J5X3BhdGhfdTMyKGJsb2IsICIvIiBPRl9TT0NfT0xELCAiYnVzLWZyZXF1ZW5jeSIsIGJkLT5iaV9pcHNmcmVxLCAwKTsKKwlkb19maXh1cF9ieV9wYXRoKGJsb2IsIGV0aF9wYXRoX29sZCwgImxvY2FsLW1hYy1hZGRyZXNzIiwKKwkJCWJkLT5iaV9lbmV0YWRkciwgNiwgMCk7CisJZG9fZml4dXBfYnlfcGF0aChibG9iLCBldGhfcGF0aF9vbGQsICJhZGRyZXNzIiwgYmQtPmJpX2VuZXRhZGRyLCA2LCAwKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzUxMngvZmVjLmMgYi9jcHUvbXBjNTEyeC9mZWMuYwppbmRleCBjMjI2YThhLi5lOWRmN2RlIDEwMDY0NAotLS0gYS9jcHUvbXBjNTEyeC9mZWMuYworKysgYi9jcHUvbXBjNTEyeC9mZWMuYwpAQCAtNjA0LDEzICs2MDQsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBtcGM1MTJ4X2ZlY19pbml0aWFsaXplIChiZF90ICogYmlzKQogewotCi0JaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCopIENGR19JTU1SOwogCW1wYzUxMnhfZmVjX3ByaXYgKmZlYzsKIAlzdHJ1Y3QgZXRoX2RldmljZSAqZGV2OwogCWludCBpOwogCWNoYXIgKnRtcCwgKmVuZCwgZW52X2VuZXRhZGRyWzZdOwotCXVpbnQzMiAqcmVnOwogCXZvaWQgKiBiZDsKIAogCWZlYyA9IChtcGM1MTJ4X2ZlY19wcml2ICopIG1hbGxvYyAoc2l6ZW9mKCpmZWMpKTsKQEAgLTYzOSwxOCArNjM2LDYgQEAKIAkJCWZlYzUxMnhfbWlpcGh5X3JlYWQsIGZlYzUxMnhfbWlpcGh5X3dyaXRlKTsKICNlbmRpZgogCi0JLyoKLQkgKiBJbml0aWFsaXplIElcTyBwaW5zCi0JICovCi0JcmVnID0gKHVpbnQzMiAqKSAmKGltLT5pb19jdHJsLnJlZ3NbUFNDMF8wX0lEWF0pOwotCi0JZm9yIChpID0gMDsgaSA8IDE1OyBpKyspCi0JCXJlZ1tpXSA9IElPQ1RSTF9NVVhfRkVDIHwgMHgwMDAwMDAwMTsKLQotCWltLT5pb19jdHJsLnJlZ3NbU1BESUZfVFhDTE9DS19JRFhdID0gSU9DVFJMX01VWF9GRUMgfCAweDAwMDAwMDAxOwotCWltLT5pb19jdHJsLnJlZ3NbU1BESUZfVFhfSURYXSA9IElPQ1RSTF9NVVhfRkVDIHwgMHgwMDAwMDAwMTsKLQlpbS0+aW9fY3RybC5yZWdzW1NQRElGX1JYX0lEWF0gPSBJT0NUUkxfTVVYX0ZFQyB8IDB4MDAwMDAwMDE7Ci0KIAkvKiBDbGVhbiB1cCBzcGFjZSBGRUMncyBNSUIgYW5kIEZJRk8gUkFNIC4uLiovCiAJbWVtc2V0ICgodm9pZCAqKSBNUEM1MTJYX0ZFQyArIDB4MjAwLCAweDAwLCAweDQwMCk7CiAKZGlmZiAtLWdpdCBhL2NwdS9tcGM1MTJ4L3NwZWVkLmMgYi9jcHUvbXBjNTEyeC9zcGVlZC5jCmluZGV4IGNmYWZmYjUuLmU2MjQ3N2IgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1MTJ4L3NwZWVkLmMKKysrIGIvY3B1L21wYzUxMngvc3BlZWQuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiBpbnQgZG9fY2xvY2tzIChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJcHJpbnRmKCJDbG9jayBjb25maWd1cmF0aW9uOlxuIik7Ci0JcHJpbnRmKCIgIENQVTogICAgICAgICAgICAgICAgICU0ZCBNSHpcbiIsIGdkLT5jcHVfY2xrIC8gMTAwMDAwMCk7CisJcHJpbnRmKCIgIENQVTogICAgICAgICAgICAgICAgICU0bGQgTUh6XG4iLCBnZC0+Y3B1X2NsayAvIDEwMDAwMDApOwogCXByaW50ZigiICBDb2hlcmVudCBTeXN0ZW0gQnVzOiAlNGQgTUh6XG4iLCBnZC0+Y3NiX2NsayAvIDEwMDAwMDApOwogCXByaW50ZigiICBJUFMgQnVzOiAgICAgICAgICAgICAlNGQgTUh6XG4iLCBnZC0+aXBzX2NsayAvIDEwMDAwMDApOwogCXByaW50ZigiICBQQ0k6ICAgICAgICAgICAgICAgICAlNGQgTUh6XG4iLCBnZC0+cGNpX2NsayAvIDEwMDAwMDApOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvZWNjLmMgYi9jcHUvbXBjODN4eC9lY2MuYwppbmRleCA2ZjEzMDk0Li41MTM3YWI2IDEwMDY0NAotLS0gYS9jcHUvbXBjODN4eC9lY2MuYworKysgYi9jcHUvbXBjODN4eC9lY2MuYwpAQCAtNDUsNyArNDUsNyBAQAogCSAgICAgICAoZGRyLT5lcnJfZGlzYWJsZSAmIEVDQ19FUlJPUl9ESVNBQkxFX01TRUQpID8gMSA6IDApOwogCiAJLyogRXJyb3IgaW5qZWN0aW9uICovCi0JcHJpbnRmKCJNZW1vcnkgRGF0YSBQYXRoIEVycm9yIEluamVjdGlvbiBNYXNrIEhpZ2gvTG93OiAlMDhseCAlMDhseFxuIiwKKwlwcmludGYoIk1lbW9yeSBEYXRhIFBhdGggRXJyb3IgSW5qZWN0aW9uIE1hc2sgSGlnaC9Mb3c6ICUwOHggJTA4eFxuIiwKIAkgICAgICAgZGRyLT5kYXRhX2Vycl9pbmplY3RfaGksIGRkci0+ZGF0YV9lcnJfaW5qZWN0X2xvKTsKIAogCXByaW50ZigiTWVtb3J5IERhdGEgUGF0aCBFcnJvciBJbmplY3Rpb24gTWFzayBFQ0M6XG4iKTsKQEAgLTc1LDggKzc1LDggQEAKIAkgICAgICAgKGRkci0+ZXJyX2RldGVjdCAmIEVDQ19FUlJPUl9ERVRFQ1RfTVNFKSA/IDEgOiAwKTsKIAogCS8qIENhcHR1cmUgZGF0YSAqLwotCXByaW50ZigiTWVtb3J5IEVycm9yIEFkZHJlc3MgQ2FwdHVyZTogMHglMDhseFxuIiwgZGRyLT5jYXB0dXJlX2FkZHJlc3MpOwotCXByaW50ZigiTWVtb3J5IERhdGEgUGF0aCBSZWFkIENhcHR1cmUgSGlnaC9Mb3c6ICUwOGx4ICUwOGx4XG4iLAorCXByaW50ZigiTWVtb3J5IEVycm9yIEFkZHJlc3MgQ2FwdHVyZTogMHglMDh4XG4iLCBkZHItPmNhcHR1cmVfYWRkcmVzcyk7CisJcHJpbnRmKCJNZW1vcnkgRGF0YSBQYXRoIFJlYWQgQ2FwdHVyZSBIaWdoL0xvdzogJTA4eCAlMDh4XG4iLAogCSAgICAgICBkZHItPmNhcHR1cmVfZGF0YV9oaSwgZGRyLT5jYXB0dXJlX2RhdGFfbG8pOwogCXByaW50ZigiTWVtb3J5IERhdGEgUGF0aCBSZWFkIENhcHR1cmUgRUNDOiAweCUwMnhcblxuIiwKIAkgICAgICAgZGRyLT5jYXB0dXJlX2VjYyAmIENBUFRVUkVfRUNDX0VDRSk7CmRpZmYgLS1naXQgYS9jcHUvbXBjODN4eC9mZHQuYyBiL2NwdS9tcGM4M3h4L2ZkdC5jCmluZGV4IDAyYzRkMDUuLmZkYTg1YzEgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4M3h4L2ZkdC5jCisrKyBiL2NwdS9tcGM4M3h4L2ZkdC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bGliZmR0Lmg+CiAjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKIGV4dGVybiB2b2lkIGZ0X3FlX3NldHVwKHZvaWQgKmJsb2IpOwogCkBAIC0zMyw2ICszNCwyMyBAQAogCiB2b2lkIGZ0X2NwdV9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKIHsKKwlpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlpbnQgc3ByaWRyID0gaW1tci0+c3lzY29uZi5zcHJpZHI7CisKKwkvKgorCSAqIGRlbGV0ZSBjcnlwdG8gbm9kZSBpZiBub3Qgb24gYW4gRS1wcm9jZXNzb3IKKwkgKiBpbml0aWFsIHJldmlzaW9ucyBvZiB0aGUgTVBDODM0eEUvNnhFIGhhdmUgdGhlIG9yaWdpbmFsIFNFQyAyLjAuCisJICogRUEgcmV2aXNpb25zIGdvdCB0aGUgU0VDIHVwcmV2dmVkIHRvIDIuNCBidXQgc2luY2UgdGhlIGRlZmF1bHQgZGV2aWNlCisJICogdHJlZSBjb250YWlucyBTRUMgMi4wIHByb3BlcnRpZXMgd2UgdXByZXYgdGhlbSBoZXJlLgorCSAqLworCWlmICghSVNfRV9QUk9DRVNTT1Ioc3ByaWRyKSkKKwkJZmR0X2ZpeHVwX2NyeXB0b19ub2RlKGJsb2IsIDApOworCWVsc2UgaWYgKElTX0VfUFJPQ0VTU09SKHNwcmlkcikgJiYKKwkJIChTUFJfRkFNSUxZKHNwcmlkcikgPT0gU1BSXzgzNFhfRkFNSUxZIHx8CisJCSAgU1BSX0ZBTUlMWShzcHJpZHIpID09IFNQUl84MzZYX0ZBTUlMWSkgJiYKKwkJIFJFVklEX01BSk9SKHNwcmlkcikgPj0gMikKKwkJZmR0X2ZpeHVwX2NyeXB0b19ub2RlKGJsb2IsIDB4MDIwNCk7CisKICNpZiBkZWZpbmVkKENPTkZJR19IQVNfRVRIMCkgfHwgZGVmaW5lZChDT05GSUdfSEFTX0VUSDEpIHx8XAogICAgIGRlZmluZWQoQ09ORklHX0hBU19FVEgyKSB8fCBkZWZpbmVkKENPTkZJR19IQVNfRVRIMykKIAlmZHRfZml4dXBfZXRoZXJuZXQoYmxvYiwgYmQpOwpAQCAtNjAsNyArNzgsNyBAQAogCiAjaWZkZWYgQ0ZHX05TMTY1NTAKIAlkb19maXh1cF9ieV9jb21wYXRfdTMyKGJsb2IsICJuczE2NTUwIiwKLQkJImNsb2NrLWZyZXF1ZW5jeSIsIGJkLT5iaV9idXNmcmVxLCAxKTsKKwkJImNsb2NrLWZyZXF1ZW5jeSIsIENGR19OUzE2NTUwX0NMSywgMSk7CiAjZW5kaWYKIAogCWZkdF9maXh1cF9tZW1vcnkoYmxvYiwgKHU2NCliZC0+YmlfbWVtc3RhcnQsICh1NjQpYmQtPmJpX21lbXNpemUpOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvc3BlZWQuYyBiL2NwdS9tcGM4M3h4L3NwZWVkLmMKaW5kZXggMTYxNDVkZC4uNzZjNTY5ZCAxMDA2NDQKLS0tIGEvY3B1L21wYzgzeHgvc3BlZWQuYworKysgYi9jcHUvbXBjODN4eC9zcGVlZC5jCkBAIC01MDgsNyArNTA4LDcgQEAKICNlbmRpZgogCXByaW50ZigiICBMb2NhbCBCdXMgQ29udHJvbGxlcjolNGQgTUh6XG4iLCBnZC0+bGJpdV9jbGsgLyAxMDAwMDAwKTsKIAlwcmludGYoIiAgTG9jYWwgQnVzOiAgICAgICAgICAgJTRkIE1IelxuIiwgZ2QtPmxjbGtfY2xrIC8gMTAwMDAwMCk7Ci0JcHJpbnRmKCIgIEREUjogICAgICAgICAgICAgICAgICU0ZCBNSHpcbiIsIGdkLT5tZW1fY2xrIC8gMTAwMDAwMCk7CisJcHJpbnRmKCIgIEREUjogICAgICAgICAgICAgICAgICU0bGQgTUh6XG4iLCBnZC0+bWVtX2NsayAvIDEwMDAwMDApOwogI2lmIGRlZmluZWQoQ09ORklHX01QQzgzNjApCiAJcHJpbnRmKCIgIEREUiBTZWNvbmRhcnk6ICAgICAgICU0ZCBNSHpcbiIsIGdkLT5tZW1fc2VjX2NsayAvIDEwMDAwMDApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjODV4eC9jcHUuYyBiL2NwdS9tcGM4NXh4L2NwdS5jCmluZGV4IDBkNTA1NDkuLmJkZThlNTYgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L2NwdS5jCisrKyBiL2NwdS9tcGM4NXh4L2NwdS5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJaWYgKGNwdSkgewogCQlwdXRzKGNwdS0+bmFtZSk7CiAKLQkJaWYgKHN2ciAmIDB4ODAwMDApCisJCWlmIChJU19FX1BST0NFU1NPUihzdnIpKQogCQkJcHV0cygiRSIpOwogCX0gZWxzZSB7CiAJCXB1dHMoIlVua25vd24iKTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMgYi9jcHUvbXBjODV4eC9jcHVfaW5pdC5jCmluZGV4IDczNmFlZjEuLjRmZWI3NTEgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzg1eHgvY3B1X2luaXQuYwpAQCAtMjYxLDM3ICsyNjEsNTAgQEAKIAl2b2xhdGlsZSB1aW50IGNhY2hlX2N0bDsKIAl1aW50IHN2ciwgdmVyOwogCXVpbnQgbDJzcmJhcjsKKwl1MzIgbDJzaXpfZmllbGQ7CiAKIAlzdnIgPSBnZXRfc3ZyKCk7CiAJdmVyID0gU1ZSX1NPQ19WRVIoc3ZyKTsKIAogCWFzbSgibXN5bmM7aXN5bmMiKTsKIAljYWNoZV9jdGwgPSBsMmNhY2hlLT5sMmN0bDsKKwlsMnNpel9maWVsZCA9IChjYWNoZV9jdGwgPj4gMjgpICYgMHgzOwogCi0Jc3dpdGNoIChjYWNoZV9jdGwgJiAweDMwMDAwMDAwKSB7Ci0JY2FzZSAweDIwMDAwMDAwOgotCQlpZiAodmVyID09IFNWUl84NTQ4IHx8IHZlciA9PSBTVlJfODU0OF9FIHx8Ci0JCSAgICB2ZXIgPT0gU1ZSXzg1NDQgfHwgdmVyID09IFNWUl84NTY4X0UpIHsKLQkJCXB1dHMgKCI1MTIgS0IgIik7Ci0JCQkvKiBzZXQgTDJFPTEsIEwyST0xLCAmIEwyU1JBTT0wICovCi0JCQljYWNoZV9jdGwgPSAweGMwMDAwMDAwOworCXN3aXRjaCAobDJzaXpfZmllbGQpIHsKKwljYXNlIDB4MDoKKwkJcHJpbnRmKCIgdW5rbm93biBzaXplICgweCUwOHgpXG4iLCBjYWNoZV9jdGwpOworCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQlpZiAodmVyID09IFNWUl84NTQwIHx8IHZlciA9PSBTVlJfODU2MCAgIHx8CisJCSAgICB2ZXIgPT0gU1ZSXzg1NDEgfHwgdmVyID09IFNWUl84NTQxX0UgfHwKKwkJICAgIHZlciA9PSBTVlJfODU1NSB8fCB2ZXIgPT0gU1ZSXzg1NTVfRSkgeworCQkJcHV0cygiMTI4IEtCICIpOworCQkJLyogc2V0IEwyRT0xLCBMMkk9MSwgJiBMMkJMS1NaPTEgKDEyOCBLYnl0ZSkgKi8KKwkJCWNhY2hlX2N0bCA9IDB4YzQwMDAwMDA7CiAJCX0gZWxzZSB7CiAJCQlwdXRzKCIyNTYgS0IgIik7Ci0JCQkvKiBzZXQgTDJFPTEsIEwyST0xLCAmIEwyQkxLU1o9MiAoMjU2IEtieXRlKSAqLwotCQkJY2FjaGVfY3RsID0gMHhjODAwMDAwMDsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4MTAwMDAwMDA6Ci0JCXB1dHMoIjI1NiBLQiAiKTsKLQkJaWYgKHZlciA9PSBTVlJfODU0NCB8fCB2ZXIgPT0gU1ZSXzg1NDRfRSkgewogCQkJY2FjaGVfY3RsID0gMHhjMDAwMDAwMDsgLyogc2V0IEwyRT0xLCBMMkk9MSwgJiBMMlNSQU09MCAqLwogCQl9CiAJCWJyZWFrOwotCWNhc2UgMHgzMDAwMDAwMDoKLQljYXNlIDB4MDAwMDAwMDA6Ci0JZGVmYXVsdDoKLQkJcHJpbnRmKCIgdW5rbm93biBzaXplICgweCUwOHgpXG4iLCBjYWNoZV9jdGwpOwotCQlyZXR1cm4gLTE7CisJY2FzZSAweDI6CisJCWlmICh2ZXIgPT0gU1ZSXzg1NDAgfHwgdmVyID09IFNWUl84NTYwICAgfHwKKwkJICAgIHZlciA9PSBTVlJfODU0MSB8fCB2ZXIgPT0gU1ZSXzg1NDFfRSB8fAorCQkgICAgdmVyID09IFNWUl84NTU1IHx8IHZlciA9PSBTVlJfODU1NV9FKSB7CisJCQlwdXRzKCIyNTYgS0IgIik7CisJCQkvKiBzZXQgTDJFPTEsIEwyST0xLCAmIEwyQkxLU1o9MiAoMjU2IEtieXRlKSAqLworCQkJY2FjaGVfY3RsID0gMHhjODAwMDAwMDsKKwkJfSBlbHNlIHsKKwkJCXB1dHMgKCI1MTIgS0IgIik7CisJCQkvKiBzZXQgTDJFPTEsIEwyST0xLCAmIEwyU1JBTT0wICovCisJCQljYWNoZV9jdGwgPSAweGMwMDAwMDAwOworCQl9CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQlwdXRzKCIxMDI0IEtCICIpOworCQkvKiBzZXQgTDJFPTEsIEwyST0xLCAmIEwyU1JBTT0wICovCisJCWNhY2hlX2N0bCA9IDB4YzAwMDAwMDA7CisJCWJyZWFrOwogCX0KIAogCWlmIChsMmNhY2hlLT5sMmN0bCAmIDB4ODAwMDAwMDApIHsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L2ZkdC5jIGIvY3B1L21wYzg1eHgvZmR0LmMKaW5kZXggOTI5NTJlNi4uYzE1OTkzNCAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvZmR0LmMKKysrIGIvY3B1L21wYzg1eHgvZmR0LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKIGV4dGVybiB2b2lkIGZ0X3FlX3NldHVwKHZvaWQgKmJsb2IpOworCiAjaWZkZWYgQ09ORklHX01QCiAjaW5jbHVkZSAibXAuaCIKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwpAQCAtMjA1LDYgKzIwNiwxMCBAQAogCiB2b2lkIGZ0X2NwdV9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKIHsKKwkvKiBkZWxldGUgY3J5cHRvIG5vZGUgaWYgbm90IG9uIGFuIEUtcHJvY2Vzc29yICovCisJaWYgKCFJU19FX1BST0NFU1NPUihnZXRfc3ZyKCkpKQorCQlmZHRfZml4dXBfY3J5cHRvX25vZGUoYmxvYiwgMCk7CisKICNpZiBkZWZpbmVkKENPTkZJR19IQVNfRVRIMCkgfHwgZGVmaW5lZChDT05GSUdfSEFTX0VUSDEpIHx8XAogICAgIGRlZmluZWQoQ09ORklHX0hBU19FVEgyKSB8fCBkZWZpbmVkKENPTkZJR19IQVNfRVRIMykKIAlmZHRfZml4dXBfZXRoZXJuZXQoYmxvYiwgYmQpOwpAQCAtMjI0LDcgKzIyOSw3IEBACiAKICNpZmRlZiBDRkdfTlMxNjU1MAogCWRvX2ZpeHVwX2J5X2NvbXBhdF91MzIoYmxvYiwgIm5zMTY1NTAiLAotCQkiY2xvY2stZnJlcXVlbmN5IiwgYmQtPmJpX2J1c2ZyZXEsIDEpOworCQkiY2xvY2stZnJlcXVlbmN5IiwgQ0ZHX05TMTY1NTBfQ0xLLCAxKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NQTTIKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L21wLmMgYi9jcHUvbXBjODV4eC9tcC5jCmluZGV4IGE1MjdjZjMuLjU1NDgzMGYgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L21wLmMKKysrIGIvY3B1L21wYzg1eHgvbXAuYwpAQCAtNTAsMTIgKzUwLDEyIEBACiAKIAlpZiAobnIgPT0gaWQpIHsKIAkJdGFibGUgPSAodTMyICopZ2V0X3NwaW5fYWRkcigpOwotCQlwcmludGYoInRhYmxlIGJhc2UgQCAweCUwOHhcbiIsIHRhYmxlKTsKKwkJcHJpbnRmKCJ0YWJsZSBiYXNlIEAgMHglcFxuIiwgdGFibGUpOwogCX0gZWxzZSB7CiAJCXRhYmxlID0gKHUzMiAqKWdldF9zcGluX2FkZHIoKSArIG5yICogTlVNX0JPT1RfRU5UUlk7CiAJCXByaW50ZigiUnVubmluZyBvbiBjcHUgJWRcbiIsIGlkKTsKIAkJcHJpbnRmKCJcbiIpOwotCQlwcmludGYoInRhYmxlIEAgMHglMDh4OlxuIiwgdGFibGUpOworCQlwcmludGYoInRhYmxlIEAgMHglcFxuIiwgdGFibGUpOwogCQlwcmludGYoIiAgIGFkZHIgLSAweCUwOHhcbiIsIHRhYmxlW0JPT1RfRU5UUllfQUREUl9MT1dFUl0pOwogCQlwcmludGYoIiAgIHBpciAgLSAweCUwOHhcbiIsIHRhYmxlW0JPT1RfRU5UUllfUElSXSk7CiAJCXByaW50ZigiICAgcjMgICAtIDB4JTA4eFxuIiwgdGFibGVbQk9PVF9FTlRSWV9SM19MT1dFUl0pOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvc3RhcnQuUyBiL2NwdS9tcGM4NXh4L3N0YXJ0LlMKaW5kZXggMmI1ZDkwZS4uMTBmZTkzNiAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvc3RhcnQuUworKysgYi9jcHUvbXBjODV4eC9zdGFydC5TCkBAIC0xODgsMTEgKzE4OCwxMiBAQAogCWxpcyAgICAgcjcsRlNMX0JPT0tFX01BUzEoMSwgMSwgMCwgMSwgQk9PS0VfUEFHRVNaXzE2TSlAaAogCW9yaSAgICAgcjcscjcsRlNMX0JPT0tFX01BUzEoMSwgMSwgMCwgMSwgQk9PS0VfUEFHRVNaXzE2TSlAbAogCi0JbGlzICAgICByOCxGU0xfQk9PS0VfTUFTMihURVhUX0JBU0UsIChNQVMyX0l8TUFTMl9HKSlAaAotCW9yaSAgICAgcjgscjgsRlNMX0JPT0tFX01BUzIoVEVYVF9CQVNFLCAoTUFTMl9JfE1BUzJfRykpQGwKKwkvKiBBbGlnbiB0aGUgbWFwcGluZyB0byAxNk1CICovCisJbGlzICAgICByOCxGU0xfQk9PS0VfTUFTMihURVhUX0JBU0UgJiAweGZmMDAwMDAwLCAoTUFTMl9JfE1BUzJfRykpQGgKKwlvcmkgICAgIHI4LHI4LEZTTF9CT09LRV9NQVMyKFRFWFRfQkFTRSAmIDB4ZmYwMDAwMDAsIChNQVMyX0l8TUFTMl9HKSlAbAogCi0JbGlzICAgICByOSxGU0xfQk9PS0VfTUFTMygweGZmODAwMDAwLCAwLCAoTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IpKUBoCi0Jb3JpICAgICByOSxyOSxGU0xfQk9PS0VfTUFTMygweGZmODAwMDAwLCAwLCAoTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IpKUBsCisJbGlzICAgICByOSxGU0xfQk9PS0VfTUFTMygweGZmMDAwMDAwLCAwLCAoTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IpKUBoCisJb3JpICAgICByOSxyOSxGU0xfQk9PS0VfTUFTMygweGZmMDAwMDAwLCAwLCAoTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IpKUBsCiAKIAltdHNwciAgIE1BUzAscjYKIAltdHNwciAgIE1BUzEscjcKZGlmZiAtLWdpdCBhL2NwdS9tcGM4Nnh4L2NwdS5jIGIvY3B1L21wYzg2eHgvY3B1LmMKaW5kZXggN2QyYjU5MS4uZWNlYTViMCAxMDA2NDQKLS0tIGEvY3B1L21wYzg2eHgvY3B1LmMKKysrIGIvY3B1L21wYzg2eHgvY3B1LmMKQEAgLTIxNCw2ICsyMTQsMjAgQEAKIHZvaWQKIHdhdGNoZG9nX3Jlc2V0KHZvaWQpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfTVBDODYxMCkKKwkvKgorCSAqIFRoaXMgYWN0dWFsbHkgZmVlZCB0aGUgaGFyZCBlbmFibGVkIHdhdGNoZG9nLgorCSAqLworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBjY3NyX3dkdF90ICp3ZHQgPSAmaW1tYXAtPmltX3dkdDsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKKwl1MzIgdG1wID0gZ3VyLT5wb3JkZXZzcjsKKworCWlmICh0bXAgJiAweDQwMDApIHsKKwkJd2R0LT5zd3NyciA9IDB4NTU2YzsKKwkJd2R0LT5zd3NyciA9IDB4YWEzOTsKKwl9CisjZW5kaWYKIH0KICNlbmRpZgkvKiBDT05GSUdfV0FUQ0hET0cgKi8KIApkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvZmR0LmMgYi9jcHUvbXBjODZ4eC9mZHQuYwppbmRleCAzNzkzMDZlLi44MGE1Yzc4IDEwMDY0NAotLS0gYS9jcHUvbXBjODZ4eC9mZHQuYworKysgYi9jcHUvbXBjODZ4eC9mZHQuYwpAQCAtMzAsNiArMzAsNiBAQAogCiAjaWZkZWYgQ0ZHX05TMTY1NTAKIAlkb19maXh1cF9ieV9jb21wYXRfdTMyKGJsb2IsICJuczE2NTUwIiwKLQkJCSAgICAgICAiY2xvY2stZnJlcXVlbmN5IiwgYmQtPmJpX2J1c2ZyZXEsIDEpOworCQkJICAgICAgICJjbG9jay1mcmVxdWVuY3kiLCBDRkdfTlMxNjU1MF9DTEssIDEpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9jcHUvbXBjODZ4eC9pbnRlcnJ1cHRzLmMgYi9jcHUvbXBjODZ4eC9pbnRlcnJ1cHRzLmMKaW5kZXggZDlmNjM0Zi4uZjE2NzQ0YiAxMDA2NDQKLS0tIGEvY3B1L21wYzg2eHgvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9tcGM4Nnh4L2ludGVycnVwdHMuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8cHBjX2FzbS50bXBsPgorI2luY2x1ZGUgPHdhdGNoZG9nLmg+CiAKIHVuc2lnbmVkIGxvbmcgZGVjcmVtZW50ZXJfY291bnQ7ICAgIC8qIGNvdW50IHZhbHVlIGZvciAxZTYvSFogbWljcm9zZWNvbmRzICovCiB1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4Nnh4L3RyYXBzLmMgYi9jcHUvbXBjODZ4eC90cmFwcy5jCmluZGV4IDU2OTVjM2UuLjEzZjM4NmQgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4Nnh4L3RyYXBzLmMKKysrIGIvY3B1L21wYzg2eHgvdHJhcHMuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJaWYgKGRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyICYmICgqZGVidWdnZXJfZXhjZXB0aW9uX2hhbmRsZXIpIChyZWdzKSkKIAkJcmV0dXJuOwogI2VuZGlmCi0JcHJpbnRmKCJVbmtub3duRXhjZXB0aW9uIHJlZ3NAJXhcbiIsIHJlZ3MpOworCXByaW50ZigiVW5rbm93bkV4Y2VwdGlvbiByZWdzQCVseFxuIiwgKHVsb25nKXJlZ3MpOwogCXByaW50ZigiQmFkIHRyYXAgYXQgUEM6ICVseCwgU1I6ICVseCwgdmVjdG9yPSVseFxuIiwKIAkgICAgICAgcmVncy0+bmlwLCByZWdzLT5tc3IsIHJlZ3MtPnRyYXApOwogCV9leGNlcHRpb24oMCwgcmVncyk7CmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L3ZpZGVvLmMgYi9jcHUvbXBjOHh4L3ZpZGVvLmMKaW5kZXggOGJmOGU0Ni4uZWY5MTE2NSAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC92aWRlby5jCisrKyBiL2NwdS9tcGM4eHgvdmlkZW8uYwpAQCAtODMzLDEwICs4MzMsMTAgQEAKIAogCQlwdXRzICgiW1ZJREVPIEVOQ09ERVJdIENvbmZpZ3VyaW5nIHRoZSBlbmNvZGVyLi4uXG4iKTsKIAotCQlwcmludGYgKCJTZW5kaW5nICVkIGJ5dGVzIChAICUwOGxYKSB0byBJMkMgMHglWDpcbiAgICIsCisJCXByaW50ZiAoIlNlbmRpbmcgJXp1IGJ5dGVzIChAICUwOGxYKSB0byBJMkMgMHglbFg6XG4gICAiLAogCQkJc2l6ZW9mKHZpZGVvX2VuY29kZXJfZGF0YSksCiAJCQkodWxvbmcpdmlkZW9fZW5jb2Rlcl9kYXRhLAotCQkJVklERU9fSTJDX0FERFIpOworCQkJKHVsb25nKVZJREVPX0kyQ19BRERSKTsKIAkJZm9yIChpPTA7IGk8c2l6ZW9mKHZpZGVvX2VuY29kZXJfZGF0YSk7ICsraSkgewogCQkJcHJpbnRmKCIgJTAyWCIsIHZpZGVvX2VuY29kZXJfZGF0YVtpXSk7CiAJCX0KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvNDB4X3NwZF9zZHJhbS5jIGIvY3B1L3BwYzR4eC80MHhfc3BkX3NkcmFtLmMKaW5kZXggNDJmZDdmYi4uYjIxYjEzZSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80MHhfc3BkX3NkcmFtLmMKKysrIGIvY3B1L3BwYzR4eC80MHhfc3BkX3NkcmFtLmMKQEAgLTEyNiw5ICsxMjYsOSBAQAogCiAJaW50IHNkcmFtMF9wbWl0PTB4MDdjMDAwMDA7CiAjaWZuZGVmIENPTkZJR180MDVFUCAvKiBub3Qgb24gUFBDNDA1RVAgKi8KLQlpbnQgc2RyYW0wX2Jlc3IwPS0xOwotCWludCBzZHJhbTBfYmVzcjE9LTE7Ci0JaW50IHNkcmFtMF9lY2Nlc3I9LTE7CisJaW50IHNkcmFtMF9iZXNyMCA9IC0xOworCWludCBzZHJhbTBfYmVzcjEgPSAtMTsKKwlpbnQgc2RyYW0wX2VjY2VzciA9IC0xOwogI2VuZGlmCiAJaW50IHNkcmFtMF9lY2NjZmc7CiAKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMgYi9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyMi5jCmluZGV4IGEyN2UyNzYuLmU5OTQwZTggMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKKysrIGIvY3B1L3BwYzR4eC80NHhfc3BkX2RkcjIuYwpAQCAtMTE1MCw1MCArMTE1MCw1MCBAQAogCWlmIChkaW1tX3R5cGUgPT0gU0RSQU1fRERSMikgewogCQljb2R0IHw9IFNEUkFNX0NPRFRfRFFTXzFfOF9WX0REUjI7CiAJCWlmICgodG90YWxfZGltbSA9PSAxKSAmJiAoZmlyc3RTbG90ID09IFRSVUUpKSB7Ci0JCQlpZiAodG90YWxfcmFuayA9PSAxKSB7CisJCQlpZiAodG90YWxfcmFuayA9PSAxKSB7CS8qIFBVVVUgKi8KIAkJCQljb2R0IHw9IENBTENfT0RUX1IoMCk7CiAJCQkJbW9kdDAgPSBDQUxDX09EVF9XKDApOwogCQkJCW1vZHQxID0gMHgwMDAwMDAwMDsKIAkJCQltb2R0MiA9IDB4MDAwMDAwMDA7CiAJCQkJbW9kdDMgPSAweDAwMDAwMDAwOwogCQkJfQotCQkJaWYgKHRvdGFsX3JhbmsgPT0gMikgeworCQkJaWYgKHRvdGFsX3JhbmsgPT0gMikgewkvKiBQUFVVICovCiAJCQkJY29kdCB8PSBDQUxDX09EVF9SKDApIHwgQ0FMQ19PRFRfUigxKTsKLQkJCQltb2R0MCA9IENBTENfT0RUX1coMCk7Ci0JCQkJbW9kdDEgPSBDQUxDX09EVF9XKDApOworCQkJCW1vZHQwID0gQ0FMQ19PRFRfVygwKSB8IENBTENfT0RUX1coMSk7CisJCQkJbW9kdDEgPSAweDAwMDAwMDAwOwogCQkJCW1vZHQyID0gMHgwMDAwMDAwMDsKIAkJCQltb2R0MyA9IDB4MDAwMDAwMDA7CiAJCQl9CiAJCX0gZWxzZSBpZiAoKHRvdGFsX2RpbW0gPT0gMSkgJiYgKGZpcnN0U2xvdCAhPSBUUlVFKSkgewotCQkJaWYgKHRvdGFsX3JhbmsgPT0gMSkgeworCQkJaWYgKHRvdGFsX3JhbmsgPT0gMSkgewkvKiBVVVBVICovCiAJCQkJY29kdCB8PSBDQUxDX09EVF9SKDIpOwogCQkJCW1vZHQwID0gMHgwMDAwMDAwMDsKIAkJCQltb2R0MSA9IDB4MDAwMDAwMDA7CiAJCQkJbW9kdDIgPSBDQUxDX09EVF9XKDIpOwogCQkJCW1vZHQzID0gMHgwMDAwMDAwMDsKIAkJCX0KLQkJCWlmICh0b3RhbF9yYW5rID09IDIpIHsKKwkJCWlmICh0b3RhbF9yYW5rID09IDIpIHsJLyogVVVQUCAqLwogCQkJCWNvZHQgfD0gQ0FMQ19PRFRfUigyKSB8IENBTENfT0RUX1IoMyk7CiAJCQkJbW9kdDAgPSAweDAwMDAwMDAwOwogCQkJCW1vZHQxID0gMHgwMDAwMDAwMDsKLQkJCQltb2R0MiA9IENBTENfT0RUX1coMik7Ci0JCQkJbW9kdDMgPSBDQUxDX09EVF9XKDIpOworCQkJCW1vZHQyID0gQ0FMQ19PRFRfVygyKSB8IENBTENfT0RUX1coMyk7CisJCQkJbW9kdDMgPSAweDAwMDAwMDAwOwogCQkJfQogCQl9CiAJCWlmICh0b3RhbF9kaW1tID09IDIpIHsKLQkJCWlmICh0b3RhbF9yYW5rID09IDIpIHsKKwkJCWlmICh0b3RhbF9yYW5rID09IDIpIHsJLyogUFVQVSAqLwogCQkJCWNvZHQgfD0gQ0FMQ19PRFRfUigwKSB8IENBTENfT0RUX1IoMik7CiAJCQkJbW9kdDAgPSBDQUxDX09EVF9SVygyKTsKIAkJCQltb2R0MSA9IDB4MDAwMDAwMDA7CiAJCQkJbW9kdDIgPSBDQUxDX09EVF9SVygwKTsKIAkJCQltb2R0MyA9IDB4MDAwMDAwMDA7CiAJCQl9Ci0JCQlpZiAodG90YWxfcmFuayA9PSA0KSB7CisJCQlpZiAodG90YWxfcmFuayA9PSA0KSB7CS8qIFBQUFAgKi8KIAkJCQljb2R0IHw9IENBTENfT0RUX1IoMCkgfCBDQUxDX09EVF9SKDEpIHwKIAkJCQkJQ0FMQ19PRFRfUigyKSB8IENBTENfT0RUX1IoMyk7Ci0JCQkJbW9kdDAgPSBDQUxDX09EVF9SVygyKTsKKwkJCQltb2R0MCA9IENBTENfT0RUX1JXKDIpIHwgQ0FMQ19PRFRfUlcoMyk7CiAJCQkJbW9kdDEgPSAweDAwMDAwMDAwOwotCQkJCW1vZHQyID0gQ0FMQ19PRFRfUlcoMCk7CisJCQkJbW9kdDIgPSBDQUxDX09EVF9SVygwKSB8IENBTENfT0RUX1JXKDEpOwogCQkJCW1vZHQzID0gMHgwMDAwMDAwMDsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC80eHhfcGNpZS5jIGIvY3B1L3BwYzR4eC80eHhfcGNpZS5jCmluZGV4IGQ1MGE1MzguLjk4MDNmY2MgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvNHh4X3BjaWUuYworKysgYi9jcHUvcHBjNHh4LzR4eF9wY2llLmMKQEAgLTI1LDExICsyNSwxMSBAQAogI2RlZmluZSBERUJVRwogI2VuZGlmCiAKLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtLXBwYy9pby5oPgotI2luY2x1ZGUgPHBwYzR4eC5oPgogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPHBwYzR4eC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20tcHBjL2lvLmg+CiAKICNpZiAoZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBkZWZpbmVkKENPTkZJR180MDVFWCkgfHwJXAogICAgIGRlZmluZWQoQ09ORklHXzQ2MEVYKSB8fCBkZWZpbmVkKENPTkZJR180NjBHVCkpICYmIFwKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvZmR0LmMgYi9jcHUvcHBjNHh4L2ZkdC5jCmluZGV4IGNjYzczZDUuLjAzMjNkYzUgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvZmR0LmMKKysrIGIvY3B1L3BwYzR4eC9mZHQuYwpAQCAtNDcsOCArNDcsMTYgQEAKIAl2YWxbMV0gPSAwOwkJCQkvKiBhbHdheXMgMCAqLwogCXZhbFsyXSA9IGdkLT5iZC0+YmlfZmxhc2hzdGFydDsKIAl2YWxbM10gPSBnZC0+YmQtPmJpX2ZsYXNoc2l6ZTsKLQlyYyA9IGZkdF9maW5kX2FuZF9zZXRwcm9wKGJsb2IsICIvcGxiL29wYi9lYmMiLCAicmFuZ2VzIiwKLQkJCQkgIHZhbCwgc2l6ZW9mKHZhbCksIDEpOworCWlmIChmZHRfcGF0aF9vZmZzZXQoYmxvYiwgIi9wbGIvb3BiL2ViYyIpID49IDApIHsKKwkJcmMgPSBmZHRfZmluZF9hbmRfc2V0cHJvcChibG9iLCAiL3BsYi9vcGIvZWJjIiwgInJhbmdlcyIsCisJCQkJCSAgdmFsLCBzaXplb2YodmFsKSwgMSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogU29tZSA0MDUgUFBDJ3MgaGF2ZSBFQkMgYXMgZGlyZWN0IFBMQiBjaGlsZCBpbiB0aGUgZHRzCisJCSAqLworCQlyYyA9IGZkdF9maW5kX2FuZF9zZXRwcm9wKGJsb2IsICIvcGxiL2ViYyIsICJyYW5nZXMiLAorCQkJCQkgIHZhbCwgc2l6ZW9mKHZhbCksIDEpOworCX0KIAlpZiAocmMpCiAJCXByaW50ZigiVW5hYmxlIHRvIHVwZGF0ZSBwcm9wZXJ0eSBOT1IgbWFwcGluZywgZXJyPSVzXG4iLAogCQkgICAgICAgZmR0X3N0cmVycm9yKHJjKSk7CmRpZmYgLS1naXQgYS9jcHUvcHhhL21tYy5jIGIvY3B1L3B4YS9tbWMuYwppbmRleCA0NDk1YTgwLi4yYzg2YTAxIDEwMDY0NAotLS0gYS9jcHUvcHhhL21tYy5jCisrKyBiL2NwdS9weGEvbW1jLmMKQEAgLTUzNSw4ICs1MzUsMTAgQEAKIAltbWNfZGV2LnJlbW92YWJsZSA9IDA7CiAJbW1jX2Rldi5ibG9ja19yZWFkID0gbW1jX2JyZWFkOwogCi0JcHJpbnRmKCJEZXRlY3RlZDogJXUgYmxvY2tzIG9mICV1IGJ5dGVzICgldU1CKSAiLCBtbWNfZGV2LmxiYSwKLQkgICAgICAgbW1jX2Rldi5ibGtzeiwgbW1jX2Rldi5sYmEgKiBtbWNfZGV2LmJsa3N6IC8gKDEwMjQgKiAxMDI0KSk7CisJcHJpbnRmKCJEZXRlY3RlZDogJWx1IGJsb2NrcyBvZiAlbHUgYnl0ZXMgKCVsdU1CKSAiLAorCQltbWNfZGV2LmxiYSwKKwkJbW1jX2Rldi5ibGtzeiwKKwkJbW1jX2Rldi5sYmEgKiBtbWNfZGV2LmJsa3N6IC8gKDEwMjQgKiAxMDI0KSk7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5tdmJjX3AgYi9kb2MvUkVBRE1FLm12YmNfcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2ZjYjRlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5tdmJjX3AKQEAgLTAsMCArMSw3MyBAQAorTWF0cml4IFZpc2lvbiBtdkJsdWVDT1VHQVItUCAobXZCQy1QKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLglCb2FyZCBEZXNjcmlwdGlvbgorCisJVGhlIG12QkMtUCBpcyBhIDcweDQweDQwbW0gbXVsdGkgYm9hcmQgZ2lnYWJpdCBldGhlcm5ldCBuZXR3b3JrIGNhbWVyYQorCXdpdGggbWFpbiBmb2N1cyBvbiBHaWdFVmlzaW9uIHByb3RvY29sIGluIGNvbWJpbmF0aW9uIHdpdGggbG9jYWwgaW1hZ2UKKwlwcmVwcm9jZXNzaW5nLgorCisJUG93ZXIgU3VwcGx5IGlzIGVpdGhlciBWREMgNDhWIG9yIFBvdmVyIG92ZXIgRXRoZXJuZXQgKFBvRSkuCisKKzIJU3lzdGVtIENvbXBvbmVudHMKKworMi4xCUNQVQorCUZyZWVzY2FsZSBNUEM1MjAwQiBDUFUgcnVubmluZyBhdCA0MDBNSHogY29yZSBhbmQgMTMzTUh6IFhMQi9JUEIuCisJNjRNQiBTRFJBTSBAIDEzM01Iei4KKwk4IE1CeXRlIE5vciBGbGFzaCBvbiBsb2NhbCBidXMuCisJMSBzZXJpYWwgcG9ydHMuIENvbnNvbGUgcnVubmluZyBvbiB0dHlTMCBAIDExNTIwMCA4TjEuCisKKzIuMglQQ0kKKwlQQ0kgY2xvY2sgZml4ZWQgYXQgNjZNSHouIEFyYml0cmF0aW9uIGluc2lkZSBGUEdBLgorCUludGVsIEdEODI1NDFFUiBuZXR3b3JrIE1BQy9QSFkgYW5kIEZQR0EgY29ubmVjdGVkLgorCisyLjMJRlBHQQorCUFsdGVyYSBDeWNsb25lLUlJIEVQMkM4IHdpdGggUENJIERNQSBlbmdpbmUuCisJQ29ubmVjdHMgdG8gTWF0cml4IFZpc2lvbiBzcGVjaWZpYyBDQ0QvQ01PUyBzZW5zb3IgaW50ZXJmYWNlLgorCVV0aWxpemVzIDY0TUIgTmFuZCBGbGFzaC4KKworMi4zLjEJSS9PIEAgRlBHQQorCTIgT3V0cHV0cyA6IHBob3RvIGNvdXBsZXIKKwkyIElucHV0cyAgOiBwaG90byBjb3VwbGVyCisKKzIuNAlJMkMKKwlMTTc1IEAgMHg5MCBmb3IgdGVtcGVyYXR1cmUgbW9uaXRvcmluZy4KKwlFRVBST00gQCAweEEwIGZvciB2ZW5kb3Igc3BlY2lmaWNzLgorCWltYWdlIHNlbnNvciBpbnRlcmZhY2UgKHNsYXZlIGFkcmVzc2VzIGRlcGVuZCBvbiBzZW5zb3IpCisKKzMJRmxhc2ggbGF5b3V0LgorCisJcmVzZXQgdmVjdG9yIGlzIDB4MDAwMDAxMDAsIGkuZS4gIkxPV0JPT1QiLgorCisJRkY4MDAwMDAJdS1ib290CisJRkY4NDAwMDAJdS1ib290IHNjcmlwdCBpbWFnZQorCUZGODUwMDAwCXJlZHVuZGFudCB1LWJvb3Qgc2NyaXB0IGltYWdlCisJRkY4NjAwMDAJRlBHQSByYXcgYml0IGZpbGUKKwlGRjhBMDAwMAl0YmQuCisJRkY5MDAwMDAJcm9vdCBGUworCUZGQzAwMDAwCWtlcm5lbAorCUZGRkMwMDAwCWRldmljZSB0cmVlIGJsb2IKKwlGRkZEMDAwMAlyZWR1bmRhbnQgZGV2aWNlIHRyZWUgYmxvYgorCUZGRkUwMDAwCWVudmlyb25tZW50CisJRkZGRjAwMDAJcmVkdW5kYW50IGVudmlyb25tZW50CisKKwltdGQgcGFydGl0aW9ucyBhcmUgcHJvcGFnYXRlZCB0byBsaW51eCBrZXJuZWwgdmlhIGRldmljZSB0cmVlIGJsb2IuCisKKzQJQm9vdGluZworCisJT24gc3RhcnR1cCB0aGUgYm9vdHNjcmlwdCBAIEZGODQwMDAwIGlzIGV4ZWN1dGVkLiBUaGlzIHNjcmlwdCBjYW4gYmUKKwlleGNoYW5nZWQgZWFzaWx5LiBEZWZhdWx0IGJvb3QgbW9kZSBpcyAiYm9vdCBmcm9tIGZsYXNoIiwgaS5lLiBzeXN0ZW0KKwl3b3JrcyBzdGFuZC1hbG9uZS4KKworCVRoaXMgYmVoYXZpb3VyIGRlcGVuZHMgb24gc29tZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgOgorCisJIm5ldGJvb3QiIDogeWVzIC0+dHJ5IGRoY3AvYm9vdHAgYW5kIGJvb3QgZnJvbSBuZXR3b3JrLgorCUEgImRoY3BfY2xpZW50X2lkIiBhbmQgImRoY3BfdmVuZG9yLWNsYXNzLWlkZW50aWZpZXIiIGNhbiBiZSB1c2VkIGZvcgorCURIQ1Agc2VydmVyIGNvbmZpZ3VyYXRpb24sIGUuZy4gdG8gcHJvdmlkZSBkaWZmZXJlbnQgaW1hZ2VzIHRvCisJZGlmZmVyZW50IGRldmljZXMuCisKKwlEdXJpbmcgbmV0Ym9vdCB0aGUgc3lzdGVtIHRyaWVzIHRvIGdldCAzIGltYWdlIGZpbGVzOgorCTEuIEtlcm5lbCAtIG5hbWUgKyBkYXRhIGlzIGdpdmVuIGR1cmluZyBCT09UUC4KKwkyLiBJbml0cmQgLSBuYW1lIGlzIHN0b3JlZCBpbiAiaW5pdHJkX25hbWUiCisJMy4gZGV2aWNlIHRyZWUgYmxvYiAtIG5hbWUgaXMgc3RvcmVkIGluICJkdGJfbmFtZSIKKwlGYWxsYmFjayBmaWxlcyBhcmUgdGhlIGZsYXNoIHZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mc2xfc2F0YS5jIGIvZHJpdmVycy9ibG9jay9mc2xfc2F0YS5jCmluZGV4IGQ0NDFhMzAuLjU1ZjU5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZnNsX3NhdGEuYworKysgYi9kcml2ZXJzL2Jsb2NrL2ZzbF9zYXRhLmMKQEAgLTUxMCw3ICs1MTAsNyBAQAogCWludCByYzsKIAogCWlmICh0YWcgPiBTQVRBX0hDX01BWF9DTUQgfHwgdGFnIDwgMCkgewotCQlwcmludGYoInRhZyBpcyBvdXQgb2YgcmFuZ2UsIHRhZz1cblxyIiwgdGFnKTsKKwkJcHJpbnRmKCJ0YWcgaXMgb3V0IG9mIHJhbmdlLCB0YWc9JWRcblxyIiwgdGFnKTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9saWJhdGEuYyBiL2RyaXZlcnMvYmxvY2svbGliYXRhLmMKaW5kZXggOTBlOWE0My4uNjViMDIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9saWJhdGEuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xpYmF0YS5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogCS8qIFRvdGFsIHNlY3RvcnMgb2YgZGV2aWNlICAqLwogCW5fc2VjdG9ycyA9IGF0YV9pZF9uX3NlY3RvcnMoaWQpOwotCXByaW50ZigiQ2FwYWJsaXR5OiAlZCBzZWN0b3JzXG5cciIsIG5fc2VjdG9ycyk7CisJcHJpbnRmKCJDYXBhYmxpdHk6ICVsbGQgc2VjdG9yc1xuXHIiLCBuX3NlY3RvcnMpOwogCiAJcHJpbnRmICgiaWRbNDldOiBjYXBhYmlsaXRpZXMgPSAweCUwNHhcbiIKIAkJImlkWzUzXTogZmllbGQgdmFsaWQgPSAweCUwNHhcbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3ltNTNjOHh4LmMgYi9kcml2ZXJzL2Jsb2NrL3N5bTUzYzh4eC5jCmluZGV4IDg3YjYzYjcuLmI4ODA0MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3ltNTNjOHh4LmMKKysrIGIvZHJpdmVycy9ibG9jay9zeW01M2M4eHguYwpAQCAtNzg0LDcgKzc4NCw3IEBACiAJCXBjY2ItPm1zZ291dFswXT1TQ1NJX0lERU5USUZZOwogCQl0cmFuc2J5dGVzPXBjY2ItPnRyYW5zX2J5dGVzOwogCQl0bXBwdHI9cGNjYi0+cGRhdGE7Ci0JCXBjY2ItPnBkYXRhPSZwY2NiLT5zZW5zZV9idWZbMF07CisJCXBjY2ItPnBkYXRhID0gJnBjY2ItPnNlbnNlX2J1ZlswXTsKIAkJZGF0YWxlbj1wY2NiLT5kYXRhbGVuOwogCQlwY2NiLT5kYXRhbGVuPTE0OwogCQl0bXBzdGF0PXBjY2ItPnN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IDA2NTQzM2EuLmYwOWYxNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtMzAsMTMgKzMwLDEzIEBACiAKIExJQgk9ICQob2JqKWxpYmh3bW9uLmEKIAotQ09CSlMteSArPSBhZG0xMDIxLm8KLUNPQkpTLXkgKz0gZHMxNjIxLm8KLUNPQkpTLXkgKz0gZHMxNzIyLm8KLUNPQkpTLXkgKz0gZHMxNzc1Lm8KK0NPQkpTLSQoQ09ORklHX0RUVF9BRE0xMDIxKSArPSBhZG0xMDIxLm8KK0NPQkpTLSQoQ09ORklHX0RUVF9EUzE2MjEpICs9IGRzMTYyMS5vCitDT0JKUy0kKENPTkZJR19EVFRfRFMxNzIyKSArPSBkczE3MjIubworQ09CSlMtJChDT05GSUdfRFRUX0RTMTc3NSkgKz0gZHMxNzc1Lm8KIENPQkpTLSQoQ09ORklHX0RUVF9MTTczKSArPSBsbTczLm8KLUNPQkpTLXkgKz0gbG03NS5vCi1DT0JKUy15ICs9IGxtODEubworQ09CSlMtJChDT05GSUdfRFRUX0xNNzUpICs9IGxtNzUubworQ09CSlMtJChDT05GSUdfRFRUX0xNODEpICs9IGxtODEubwogCiBDT0JKUwk6PSAkKENPQkpTLXkpCiBTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCmluZGV4IDlmNjVjZmIyNy4uYjc5MWVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMDIxLmMKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDIxLmMKQEAgLTMzLDExICszMyw0MCBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpZmRlZiBDT05GSUdfRFRUX0FETTEwMjEKLQogI2luY2x1ZGUgPGkyYy5oPgogI2luY2x1ZGUgPGR0dC5oPgogCisjZGVmaW5lIERUVF9SRUFEX0xPQ19WQUxVRQkweDAwCisjZGVmaW5lIERUVF9SRUFEX1JFTV9WQUxVRQkweDAxCisjZGVmaW5lIERUVF9SRUFEX1NUQVRVUwkJMHgwMgorI2RlZmluZSBEVFRfUkVBRF9DT05GSUcJCTB4MDMKKyNkZWZpbmUgRFRUX1JFQURfQ09OVlJBVEUJMHgwNAorI2RlZmluZSBEVFRfUkVBRF9MT0NfSElHSExJTQkweDA1CisjZGVmaW5lIERUVF9SRUFEX0xPQ19MT1dMSU0JMHgwNgorI2RlZmluZSBEVFRfUkVBRF9SRU1fSElHSExJTQkweDA3CisjZGVmaW5lIERUVF9SRUFEX1JFTV9MT1dMSU0JMHgwOAorI2RlZmluZSBEVFRfUkVBRF9ERVZJRAkJMHhmZQorCisjZGVmaW5lIERUVF9XUklURV9DT05GSUcJMHgwOQorI2RlZmluZSBEVFRfV1JJVEVfQ09OVlJBVEUJMHgwYQorI2RlZmluZSBEVFRfV1JJVEVfTE9DX0hJR0hMSU0JMHgwYgorI2RlZmluZSBEVFRfV1JJVEVfTE9DX0xPV0xJTQkweDBjCisjZGVmaW5lIERUVF9XUklURV9SRU1fSElHSExJTQkweDBkCisjZGVmaW5lIERUVF9XUklURV9SRU1fTE9XTElNCTB4MGUKKyNkZWZpbmUgRFRUX1dSSVRFX09ORVNIT1QJMHgwZgorCisjZGVmaW5lIERUVF9TVEFUVVNfQlVTWQkJMHg4MAkvKiAxPUFEQyBDb252ZXJ0aW5nICovCisjZGVmaW5lIERUVF9TVEFUVVNfTEhJR0gJMHg0MAkvKiAxPUxvY2FsIEhpZ2ggVGVtcCBMaW1pdCBUcmlwcGVkICovCisjZGVmaW5lIERUVF9TVEFUVVNfTExPVwkJMHgyMAkvKiAxPUxvY2FsIExvdyBUZW1wIExpbWl0IFRyaXBwZWQgKi8KKyNkZWZpbmUgRFRUX1NUQVRVU19SSElHSAkweDEwCS8qIDE9UmVtb3RlIEhpZ2ggVGVtcCBMaW1pdCBUcmlwcGVkICovCisjZGVmaW5lIERUVF9TVEFUVVNfUkxPVwkJMHgwOAkvKiAxPVJlbW90ZSBMb3cgVGVtcCBMaW1pdCBUcmlwcGVkICovCisjZGVmaW5lIERUVF9TVEFUVVNfT1BFTgkJMHgwNAkvKiAxPVJlbW90ZSBTZW5zb3IgT3Blbi1DaXJjdWl0ICovCisKKyNkZWZpbmUgRFRUX0NPTkZJR19BTEVSVF9NQVNLRUQJMHg4MAkvKiAwPUFMRVJUIEVuYWJsZWQsIDE9QUxFUlQgTWFza2VkICovCisjZGVmaW5lIERUVF9DT05GSUdfU1RBTkRCWQkweDQwCS8qIDA9UnVuLCAxPVN0YW5kYnkgKi8KKworI2RlZmluZSBEVFRfQURNMTAyMV9ERVZJRAkweDQxCisKIHR5cGVkZWYKIAlzdHJ1Y3QgewogCQl1aW50IGkyY19hZGRyOjc7CS8qIDdiaXQgaTJjIGNoaXAgYWRkcmVzcyAqLwpAQCAtMTcwLDUgKzE5OSwzIEBACiAKIAlyZXR1cm4gKGludCkgdmFsOwogfSAvKiBkdHRfZ2V0X3RlbXAoKSAqLwotCi0jZW5kaWYgLyogQ09ORklHX0RUVF9BRE0xMDIxICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jIGIvZHJpdmVycy9od21vbi9kczE2MjEuYwppbmRleCA0OTQ4MTgxLi43NDlhYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogCi0jaWZkZWYgQ09ORklHX0RUVF9EUzE2MjEKICNpZiAhZGVmaW5lZChDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFKSB8fCBcCiAJKENGR19FRVBST01fUEFHRV9XUklURV9CSVRTIDwgMSkKICMgZXJyb3IgIkNGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUgbXVzdCBiZSBkZWZpbmVkIGFuZCBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIHRvIHVzZSBDT05GSUdfRFRUX0RTMTYyMSIKQEAgLTM5LDYgKzM4LDE0IEBACiAgKiBEZXZpY2UgY29kZQogICovCiAjZGVmaW5lIERUVF9JMkNfREVWX0NPREUgMHg0OAkJCS8qIERhbGxhcyBTZW1pJ3MgRFMxNjIxICovCisjZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4QUEKKyNkZWZpbmUgRFRUX1JFQURfQ09VTlRFUgkweEE4CisjZGVmaW5lIERUVF9SRUFEX1NMT1BFCQkweEE5CisjZGVmaW5lIERUVF9XUklURV9TVEFSVF9DT05WCTB4RUUKKyNkZWZpbmUgRFRUX1dSSVRFX1NUT1BfQ09OVgkweDIyCisjZGVmaW5lIERUVF9URU1QX0hJR0gJCTB4QTEKKyNkZWZpbmUgRFRUX1RFTVBfTE9XCQkweEEyCisjZGVmaW5lIERUVF9DT05GSUcJCTB4QUMKIAogaW50IGR0dF9yZWFkKGludCBzZW5zb3IsIGludCByZWcpCiB7CkBAIC0xODUsNiArMTkyLDMgQEAKIAogICAgIHJldHVybiAoZHR0X3JlYWQoc2Vuc29yLCBEVFRfUkVBRF9URU1QKSAvIDI1Nik7CiB9IC8qIGR0dF9nZXRfdGVtcCgpICovCi0KLQotI2VuZGlmIC8qIENPTkZJR19EVFRfRFMxNjIxICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RzMTcyMi5jIGIvZHJpdmVycy9od21vbi9kczE3MjIuYwppbmRleCBjMTllZTAxLi43ZTJmMWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RzMTcyMi5jCisrKyBiL2RyaXZlcnMvaHdtb24vZHMxNzIyLmMKQEAgLTEsOCArMSw1IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KLQotI2lmZGVmIENPTkZJR19EUzE3MjIKLQogI2luY2x1ZGUgPHNzaS5oPgogCiBzdGF0aWMgdm9pZCBkczE3MjJfc2VsZWN0KGludCBkZXYpCkBAIC0xMzgsNSArMTM1LDMgQEAKIAlwcmludGYoIiVkLiVkIGRlZyBDXG5cbiIsIChjaGFyKSh0ZW1wID4+IDgpLCB0ZW1wICYgMHhmZik7CiAJcmV0dXJuIDA7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9kczE3NzUuYyBiL2RyaXZlcnMvaHdtb24vZHMxNzc1LmMKaW5kZXggMGZiYjBiNC4uNmE0ZDhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9kczE3NzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2RzMTc3NS5jCkBAIC0yMSwxMSArMjEsMTQgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogCi0jaWZkZWYgQ09ORklHX0RUVF9EUzE3NzUKICNpbmNsdWRlIDxpMmMuaD4KICNpbmNsdWRlIDxkdHQuaD4KIAogI2RlZmluZSBEVFRfSTJDX0RFVl9DT0RFCUNGR19JMkNfRFRUX0FERFIgLyogRGFsbGFzIFNlbWkncyBEUzE3NzUgZGV2aWNlIGNvZGUgKi8KKyNkZWZpbmUgRFRUX1JFQURfVEVNUAkJMHgwCisjZGVmaW5lIERUVF9DT05GSUcJCTB4MQorI2RlZmluZSBEVFRfVEVNUF9IWVNUCQkweDIKKyNkZWZpbmUgRFRUX1RFTVBfT1MJCTB4MwogCiBpbnQgZHR0X3JlYWQoaW50IHNlbnNvciwgaW50IHJlZykKIHsKQEAgLTE1MSw2ICsxNTQsMyBAQAogewogCXJldHVybiAoZHR0X3JlYWQoc2Vuc29yLCBEVFRfUkVBRF9URU1QKSAvIDI1Nik7CiB9Ci0KLQotI2VuZGlmIC8qIENPTkZJR19EVFRfRFMxNzc1ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNzMuYyBiL2RyaXZlcnMvaHdtb24vbG03My5jCmluZGV4IDk4ZThiZDIuLmRkMjQ2ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG03My5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG03My5jCkBAIC0zOCw2ICszOCwxMiBAQAogICogRGV2aWNlIGNvZGUKICAqLwogI2RlZmluZSBEVFRfSTJDX0RFVl9DT0RFIDB4NDgJLyogTmF0aW9uYWwgU2VtaSdzIExNNzMgZGV2aWNlICovCisjZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MAorI2RlZmluZSBEVFRfQ09ORklHCQkweDEKKyNkZWZpbmUgRFRUX1RFTVBfSElHSAkJMHgyCisjZGVmaW5lIERUVF9URU1QX0xPVwkJMHgzCisjZGVmaW5lIERUVF9DT05UUk9MCQkweDQKKyNkZWZpbmUgRFRUX0lECQkJMHg3CiAKIGludCBkdHRfcmVhZChpbnQgY29uc3Qgc2Vuc29yLCBpbnQgY29uc3QgcmVnKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc1LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwppbmRleCBjMzQ4NTE3Li44MDUxY2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpZmRlZiBDT05GSUdfRFRUX0xNNzUKICNpZiAhZGVmaW5lZChDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFKSB8fCBcCiAJKENGR19FRVBST01fUEFHRV9XUklURV9CSVRTIDwgMSkKICMgZXJyb3IgIkNGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUgbXVzdCBiZSBkZWZpbmVkIGFuZCBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAgMSB0byB1c2UgQ09ORklHX0RUVF9MTTc1IgpAQCAtMzYsMTEgKzM1LDE0IEBACiAjaW5jbHVkZSA8aTJjLmg+CiAjaW5jbHVkZSA8ZHR0Lmg+CiAKLQogLyoKICAqIERldmljZSBjb2RlCiAgKi8KICNkZWZpbmUgRFRUX0kyQ19ERVZfQ09ERSAweDQ4CQkJLyogT04gU2VtaSdzIExNNzUgZGV2aWNlICovCisjZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MAorI2RlZmluZSBEVFRfQ09ORklHCQkweDEKKyNkZWZpbmUgRFRUX1RFTVBfSFlTVAkJMHgyCisjZGVmaW5lIERUVF9URU1QX1NFVAkJMHgzCiAKIGludCBkdHRfcmVhZChpbnQgc2Vuc29yLCBpbnQgcmVnKQogewpAQCAtMjAwLDUgKzIwMiwzIEBACiAgICAgfQogICAgIHJldHVybiAoaW50KSgoaW50MTZfdCkgcmV0IC8gMjU2KTsKIH0gLyogZHR0X2dldF90ZW1wKCkgKi8KLQotI2VuZGlmIC8qIENPTkZJR19EVFRfTE03NSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTgxLmMgYi9kcml2ZXJzL2h3bW9uL2xtODEuYwppbmRleCAwM2JjNTNkLi45MzQ5ZWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODEuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODEuYwpAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpZmRlZiBDT05GSUdfRFRUX0xNODEKICNpZiAhZGVmaW5lZChDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFKSB8fCBcCiAJKENGR19FRVBST01fUEFHRV9XUklURV9CSVRTIDwgMSkKICMgZXJyb3IgIkNGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUgbXVzdCBiZSBkZWZpbmVkIGFuZCBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAgMSB0byB1c2UgQ09ORklHX0RUVF9MTTgxIgpAQCAtNDUsNiArNDQsMTEgQEAKICAqIERldmljZSBjb2RlCiAgKi8KICNkZWZpbmUgRFRUX0kyQ19ERVZfQ09ERSAweDJjCQkJLyogT04gU2VtaSdzIExNODEgZGV2aWNlICovCisjZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MjcKKyNkZWZpbmUgRFRUX0NPTkZJR19URU1QCQkweDRiCisjZGVmaW5lIERUVF9URU1QX01BWAkJMHgzOQorI2RlZmluZSBEVFRfVEVNUF9IWVNUCQkweDNhCisjZGVmaW5lIERUVF9DT05GSUcJCTB4NDAKIAogaW50IGR0dF9yZWFkKGludCBzZW5zb3IsIGludCByZWcpCiB7CkBAIC0xNDQsNSArMTQ4LDMgQEAKIAogCXJldHVybiAoVEVNUF9GUk9NX1JFRygodmFsIDw8IDEpICsgKCh0bXBjbmYgJiAweDgwKSA+PiA3KSkpIC8gMTA7CiB9IC8qIGR0dF9nZXRfdGVtcCgpICovCi0KLSNlbmRpZiAvKiBDT05GSUdfRFRUX0xNODEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvcGNfa2V5Yi5jIGIvZHJpdmVycy9pbnB1dC9wY19rZXliLmMKaW5kZXggODFkM2U5OC4uMzNlN2M1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9wY19rZXliLmMKKysrIGIvZHJpdmVycy9pbnB1dC9wY19rZXliLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAlpbnQgdmFsOwogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwogCi0JdmFsPS0xOworCXZhbCA9IC0xOwogCXN0YXR1cyA9IGtiZF9yZWFkX3N0YXR1cygpOwogCWlmIChzdGF0dXMgJiBLQkRfU1RBVF9PQkYpIHsKIAkJdmFsID0ga2JkX3JlYWRfaW5wdXQoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NmaV9mbGFzaC5jIGIvZHJpdmVycy9tdGQvY2ZpX2ZsYXNoLmMKaW5kZXggYzBlYTk3Yi4uMTI2NDdlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2ZpX2ZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvY2ZpX2ZsYXNoLmMKQEAgLTMwMSwxMSArMzAxLDE0IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBtYWtlIGEgcHJvcGVyIHNpemVkIGNvbW1hbmQgYmFzZWQgb24gdGhlIHBvcnQgYW5kIGNoaXAgd2lkdGhzCiAgKi8KLXN0YXRpYyB2b2lkIGZsYXNoX21ha2VfY21kIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBjbWQsIHZvaWQgKmNtZGJ1ZikKK3N0YXRpYyB2b2lkIGZsYXNoX21ha2VfY21kKGZsYXNoX2luZm9fdCAqaW5mbywgdTMyIGNtZCwgdm9pZCAqY21kYnVmKQogewogCWludCBpOwogCWludCBjd29yZF9vZmZzZXQ7CiAJaW50IGNwX29mZnNldDsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikgfHwgZGVmaW5lZChDRkdfV1JJVEVfU1dBUFBFRF9EQVRBKQorCXUzMiBjbWRfbGUgPSBjcHVfdG9fbGUzMihjbWQpOworI2VuZGlmCiAJdWNoYXIgdmFsOwogCXVjaGFyICpjcCA9ICh1Y2hhciAqKSBjbWRidWY7CiAKQEAgLTMxMywxMiArMzE2LDEyIEBACiAJCWN3b3JkX29mZnNldCA9IChpbmZvLT5wb3J0d2lkdGgtaSklaW5mby0+Y2hpcHdpZHRoOwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSB8fCBkZWZpbmVkKENGR19XUklURV9TV0FQUEVEX0RBVEEpCiAJCWNwX29mZnNldCA9IGluZm8tPnBvcnR3aWR0aCAtIGk7Ci0JCXZhbCA9ICooKHVjaGFyKikmY21kICsgY3dvcmRfb2Zmc2V0KTsKKwkJdmFsID0gKigodWNoYXIqKSZjbWRfbGUgKyBjd29yZF9vZmZzZXQpOwogI2Vsc2UKIAkJY3Bfb2Zmc2V0ID0gaSAtIDE7Ci0JCXZhbCA9ICooKHVjaGFyKikmY21kICsgc2l6ZW9mKHVsb25nKSAtIGN3b3JkX29mZnNldCAtIDEpOworCQl2YWwgPSAqKCh1Y2hhciopJmNtZCArIHNpemVvZih1MzIpIC0gY3dvcmRfb2Zmc2V0IC0gMSk7CiAjZW5kaWYKLQkJY3BbY3Bfb2Zmc2V0XSA9IChjd29yZF9vZmZzZXQgPj0gc2l6ZW9mKHVsb25nKSkgPyAweDAwIDogdmFsOworCQljcFtjcF9vZmZzZXRdID0gKGN3b3JkX29mZnNldCA+PSBzaXplb2YodTMyKSkgPyAweDAwIDogdmFsOwogCX0KIH0KIApAQCAtNDMzLDcgKzQzNiw3IEBACiAgKiBXcml0ZSBhIHByb3BlciBzaXplZCBjb21tYW5kIHRvIHRoZSBjb3JyZWN0IGFkZHJlc3MKICAqLwogc3RhdGljIHZvaWQgZmxhc2hfd3JpdGVfY21kIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBmbGFzaF9zZWN0X3Qgc2VjdCwKLQkJCSAgICAgdWludCBvZmZzZXQsIHVsb25nIGNtZCkKKwkJCSAgICAgdWludCBvZmZzZXQsIHUzMiBjbWQpCiB7CiAKIAl2b2lkICphZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGF0YWZsYXNoLmMgYi9kcml2ZXJzL210ZC9kYXRhZmxhc2guYwppbmRleCA4MjQ3YWEwLi4wYWQ0OGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kYXRhZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9kYXRhZmxhc2guYwpAQCAtNTQsNiArNTQsMTcgQEAKIAkJCQkmZGF0YWZsYXNoX2luZm9baV0uRGVzYyk7CiAKIAkJc3dpdGNoIChkZmNvZGUpIHsKKwkJY2FzZSBBVDQ1REIwMjE6CisJCQlkYXRhZmxhc2hfaW5mb1tpXS5EZXZpY2UucGFnZXNfbnVtYmVyID0gMTAyNDsKKwkJCWRhdGFmbGFzaF9pbmZvW2ldLkRldmljZS5wYWdlc19zaXplID0gMjYzOworCQkJZGF0YWZsYXNoX2luZm9baV0uRGV2aWNlLnBhZ2Vfb2Zmc2V0ID0gOTsKKwkJCWRhdGFmbGFzaF9pbmZvW2ldLkRldmljZS5ieXRlX21hc2sgPSAweDMwMDsKKwkJCWRhdGFmbGFzaF9pbmZvW2ldLkRldmljZS5jcyA9IGNzW2ldLmNzOworCQkJZGF0YWZsYXNoX2luZm9baV0uRGVzYy5EYXRhRmxhc2hfc3RhdGUgPSBJRExFOworCQkJZGF0YWZsYXNoX2luZm9baV0ubG9naWNhbF9hZGRyZXNzID0gY3NbaV0uYWRkcjsKKwkJCWRhdGFmbGFzaF9pbmZvW2ldLmlkID0gZGZjb2RlOworCQkJZm91bmRbaV0gKz0gZGZjb2RlOzsKKwkJCWJyZWFrOwogCQljYXNlIEFUNDVEQjE2MToKIAkJCWRhdGFmbGFzaF9pbmZvW2ldLkRldmljZS5wYWdlc19udW1iZXIgPSA0MDk2OwogCQkJZGF0YWZsYXNoX2luZm9baV0uRGV2aWNlLnBhZ2VzX3NpemUgPSA1Mjg7CkBAIC0xNjIsNyArMTczLDcgQEAKIAkJCWlmKChlbnYgJiBGTEFHX1NFVEVOVikgPT0gRkxBR19TRVRFTlYpIHsKIAkJCQlzdGFydCA9CiAJCQkJZGF0YWZsYXNoX2luZm9baV0uRGV2aWNlLmFyZWFfbGlzdFtqXS5zdGFydDsKLQkJCQlzcHJpbnRmKChjaGFyKikgcywiJVgiLHN0YXJ0KTsKKwkJCQlzcHJpbnRmKChjaGFyKikgcywiJWxYIixzdGFydCk7CiAJCQkJc2V0ZW52KChjaGFyKikgYXJlYV9saXN0W3BhcnRdLmxhYmVsLChjaGFyKikgcyk7CiAJCQl9CiAJCQlwYXJ0Kys7CkBAIC0xNzgsNiArMTg5LDkgQEAKIAkJaWYgKGRhdGFmbGFzaF9pbmZvW2ldLmlkICE9IDApIHsKIAkJCXByaW50ZigiRGF0YUZsYXNoOiIpOwogCQkJc3dpdGNoIChkYXRhZmxhc2hfaW5mb1tpXS5pZCkgeworCQkJY2FzZSBBVDQ1REIwMjE6CisJCQkJcHJpbnRmKCJBVDQ1REIwMjFcbiIpOworCQkJCWJyZWFrOwogCQkJY2FzZSBBVDQ1REIxNjE6CiAJCQkJcHJpbnRmKCJBVDQ1REIxNjFcbiIpOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IDE0ODRiMGIuLjBmZmY4MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCiAJdmFsID0gcmVnX3JlYWQoQllURV9URVNUKTsKIAlpZiAodmFsICE9IDB4ODc2NTQzMjEpIHsKLQkJcHJpbnRmKERSSVZFUk5BTUUgIjogSW52YWxpZCBjaGlwIGVuZGlhbiAweCUwOHhcbiIsIHZhbCk7CisJCXByaW50ZihEUklWRVJOQU1FICI6IEludmFsaWQgY2hpcCBlbmRpYW4gMHglMDhseFxuIiwgdmFsKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIApAQCAtNjA2LDcgKzYwNiw3IEBACiAJCWlmIChjaGlwX2lkc1tpXS5pZCA9PSB2YWwpIGJyZWFrOwogCX0KIAlpZiAoIWNoaXBfaWRzW2ldLmlkKSB7Ci0JCXByaW50ZihEUklWRVJOQU1FICI6IFVua25vd24gY2hpcCBJRCAlMDR4XG4iLCB2YWwpOworCQlwcmludGYoRFJJVkVSTkFNRSAiOiBVbmtub3duIGNoaXAgSUQgJTA0bHhcbiIsIHZhbCk7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwppbmRleCA1N2MwZGMzLi4yNTM0MDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCkBAIC04OTksNyArODk5LDcgQEAKIAlzdGF0dXMgPSBsZTMyX3RvX2NwdSh0eF9kZXNjci0+Y29uZmlnX3N0YXR1cyk7CiAJaWYgKChzdGF0dXMgJiBETUFfREVTQ1JfVFhfT0spID09IDApIHsKICNpZmRlZiBUWF9QUklOVF9FUlJPUlMKLQkJcHJpbnRmICgiVFggcGFja2V0IGVycm9yOiAweCUwOHhcbiAgICAlcyVzJXMlc1xuIiwgc3RhdHVzLAorCQlwcmludGYgKCJUWCBwYWNrZXQgZXJyb3I6IDB4JTA4bHhcbiAgICAlcyVzJXMlc1xuIiwgc3RhdHVzLAogCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1RYX09LID8gInR4IGVycm9yLCAiIDogIiIsCiAJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfVFhfUkVUUllfTElNSVQgPwogCQkgICAgICAgInJldHJ5IGxpbWl0IHJlYWNoZWQsICIgOiAiIiwKQEAgLTk1OSw3ICs5NTksNyBAQAogCQlzdGF0dXMgPSBsZTMyX3RvX2NwdShyeF9kZXNjci0+Y29uZmlnX3N0YXR1cyk7CiAJCWlmIChzdGF0dXMgJiBETUFfREVTQ1JfUlhfQkFEX0ZSQU1FKSB7CiAjaWZkZWYgUlhfUFJJTlRfRVJST1JTCi0JCQlwcmludGYgKCJSWCBwYWNrZXQgZXJyb3I6IDB4JTA4eFxuICAgICVzJXMlcyVzJXMlc1xuIiwKKwkJCXByaW50ZiAoIlJYIHBhY2tldCBlcnJvcjogMHglMDhseFxuICAgICVzJXMlcyVzJXMlc1xuIiwKIAkJCSAgICAgICBzdGF0dXMsCiAJCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1JYX0ZSQU1FX0lTX1RZUEUgPyAidG9vIGJpZywgIgogCQkJICAgICAgIDogIiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91bGk1MjZ4LmMgYi9kcml2ZXJzL25ldC91bGk1MjZ4LmMKaW5kZXggNzE0NWI3Mi4uZDg3NjM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWxpNTI2eC5jCisrKyBiL2RyaXZlcnMvbmV0L3VsaTUyNnguYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAJCQkvKiBlcnJvciBzdW1tYXJ5IGJpdCBjaGVjayAqLwogCQkJaWYgKHJkZXMwICYgMHg4MDAwKSB7CiAJCQkJLyogVGhpcyBpcyBhIGVycm9yIHBhY2tldCAqLwotCQkJCXByaW50ZigiRXJvb3I6IHJkZXMwOiAlbHhcbiIsIHJkZXMwKTsKKwkJCQlwcmludGYoIkVycm9yOiByZGVzMDogJXhcbiIsIHJkZXMwKTsKIAkJCX0KIAogCQkJaWYgKCEocmRlczAgJiAweDgwMDApIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9mc2xfcGNpX2luaXQuYyBiL2RyaXZlcnMvcGNpL2ZzbF9wY2lfaW5pdC5jCmluZGV4IDdkYzMzYmUuLmE3YWZhOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ZzbF9wY2lfaW5pdC5jCisrKyBiL2RyaXZlcnMvcGNpL2ZzbF9wY2lfaW5pdC5jCkBAIC01OSw4ICs1OSw4IEBACiAJcGNpX2Rldl90IGRldiA9IFBDSV9CREYoYnVzbm8sMCwwKTsKIAogCS8qIEluaXRpYWxpemUgQVRNVSByZWdpc3RlcnMgYmFzZWQgb24gaG9zZSByZWdpb25zIGFuZCBmbGFncyAqLwotCXZvbGF0aWxlIHBvdF90ICpwbz0mcGNpLT5wb3RbMV07CS8qIHNraXAgMCAqLwotCXZvbGF0aWxlIHBpdF90ICpwaT0mcGNpLT5waXRbMF07CS8qIHJhbmdlcyBmcm9tOiAzIHRvIDEgKi8KKwl2b2xhdGlsZSBwb3RfdCAqcG8gPSAmcGNpLT5wb3RbMV07CS8qIHNraXAgMCAqLworCXZvbGF0aWxlIHBpdF90ICpwaSA9ICZwY2ktPnBpdFswXTsJLyogcmFuZ2VzIGZyb206IDMgdG8gMSAqLwogCiAjaWZkZWYgREVCVUcKIAlpbnQgbmVnX2xpbmtfdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaV9zaDQuYyBiL2RyaXZlcnMvcGNpL3BjaV9zaDQuYwppbmRleCAxMjkwYzBhLi4wNTdiNmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2lfc2g0LmMKKysrIGIvZHJpdmVycy9wY2kvcGNpX3NoNC5jCkBAIC03NCwzICs3NCwxNSBAQAogCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOwogCXJldHVybiAwOwogfQorCitpbnQgcGNpX3NraXBfZGV2KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgcGNpX2Rldl90IGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QQ0lfU0NBTl9TSE9XCitpbnQgcGNpX3ByaW50X2RldihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHBjaV9kZXZfdCBkZXYpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogQ09ORklHX1BDSV9TQ0FOX1NIT1cgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2RzMTM3NC5jIGIvZHJpdmVycy9ydGMvZHMxMzc0LmMKaW5kZXggZjZiYjI5Ni4uMTUzM2I2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvZHMxMzc0LmMKKysrIGIvZHJpdmVycy9ydGMvZHMxMzc0LmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCQlyZWwgPSAtMTsKIAl9CiAKLQlERUJVR1IgKCJHZXQgUlRDIHMgc2luY2UgMS4xLjE5NzA6ICVkXG4iLCB0aW1lMSk7CisJREVCVUdSICgiR2V0IFJUQyBzIHNpbmNlIDEuMS4xOTcwOiAlbGRcbiIsIHRpbWUxKTsKIAogCXRvX3RtKHRpbWUxLCB0bSk7IC8qIFRvIEdyZWdvcmlhbiBEYXRlICovCiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogCQkJdG1wLT50bV9tZGF5LCB0bXAtPnRtX2hvdXIsCiAJCQl0bXAtPnRtX21pbiwgdG1wLT50bV9zZWMpOwogCi0JREVCVUdSICgiU2V0IFJUQyBzIHNpbmNlIDEuMS4xOTcwOiAlZCAoMHglMDJ4KVxuIiwgdGltZSwgdGltZSk7CisJREVCVUdSICgiU2V0IFJUQyBzIHNpbmNlIDEuMS4xOTcwOiAlbGQgKDB4JTAybHgpXG4iLCB0aW1lLCB0aW1lKTsKIAogCS8qIHdyaXRlIHRvIFJUQ19UT0RfQ05UX0JZVEVuX0FERFIgKi8KIAlmb3IgKGkgPSAwOyBpIDw9IDM7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbWNmdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbWNmdWFydC5jCmluZGV4IDg4ZjNlYjEuLjVlYjRmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21jZnVhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tY2Z1YXJ0LmMKQEAgLTYzLDggKzYzLDggQEAKIAl1YXJ0LT51bXIgPSBVQVJUX1VNUl9TQl9TVE9QX0JJVFNfMTsKIAogCS8qIFNldHRpbmcgdXAgQmF1ZFJhdGUgKi8KLQljb3VudGVyID0gKHUzMikgKGdkLT5idXNfY2xrIC8gKGdkLT5iYXVkcmF0ZSkpOwotCWNvdW50ZXIgPj49IDU7CisJY291bnRlciA9ICh1MzIpICgoZ2QtPmJ1c19jbGsgLyAzMikgKyAoZ2QtPmJhdWRyYXRlIC8gMikpOworCWNvdW50ZXIgPSBjb3VudGVyIC8gZ2QtPmJhdWRyYXRlOwogCiAJLyogd3JpdGUgdG8gQ1RVUjogZGl2aWRlIGNvdW50ZXIgdXBwZXIgYnl0ZSAqLwogCXVhcnQtPnViZzEgPSAodTgpICgoY291bnRlciAmIDB4ZmYwMCkgPj4gOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbC5jCmluZGV4IDE4MmNhMmQuLjhiYmZjZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbC5jCkBAIC0xNDcsMTAgKzE0NywxMSBAQAogCiAJLyogQ29tcHV0ZSBkaXZpc29yIHZhbHVlLiBOb3JtYWxseSwgd2Ugc2hvdWxkIHNpbXBseSByZXR1cm46CiAJICogICBDRkdfTlMxNjU1MF9DTEspIC8gTU9ERV9YX0RJViAvIGdkLT5iYXVkcmF0ZQotCSAqIGJ1dCB3ZSBuZWVkIHRvIHJvdW5kIHRoYXQgdmFsdWUgYnkgYWRkaW5nIDAuNSBvciA4LzE2LgorCSAqIGJ1dCB3ZSBuZWVkIHRvIHJvdW5kIHRoYXQgdmFsdWUgYnkgYWRkaW5nIDAuNS4KIAkgKiBSb3VuZGluZyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhdCBoaWdoIGJhdWQgcmF0ZXMuCiAJICovCi0JcmV0dXJuICgoKDE2ICogQ0ZHX05TMTY1NTBfQ0xLKSAvIE1PREVfWF9ESVYgLyBnZC0+YmF1ZHJhdGUpICsgOCkgLyAxNjsKKwlyZXR1cm4gKENGR19OUzE2NTUwX0NMSyArIChnZC0+YmF1ZHJhdGUgKiAoTU9ERV9YX0RJViAvIDIpKSkgLworCQkoTU9ERV9YX0RJViAqIGdkLT5iYXVkcmF0ZSk7CiB9CiAKICNpZiAhZGVmaW5lZChDT05GSUdfU0VSSUFMX01VTFRJKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3h1YXJ0bGl0ZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3h1YXJ0bGl0ZS5jCmluZGV4IGQ2NzhhYjYuLjc0NTQ2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF94dWFydGxpdGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfeHVhcnRsaXRlLmMKQEAgLTEsNiArMSw4IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDA0IEF0bWFyayBUZWNobm8sIEluYy4KKyAqIChDKSBDb3B5cmlnaHQgMjAwOCBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CisgKiBDbGVhbiBkcml2ZXIgYW5kIGFkZCB4aWxpbnggY29uc3RhbnQgZnJvbSBoZWFkZXIgZmlsZQogICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNCBBdG1hcmsgVGVjaG5vLCBJbmMuCiAgKiBZYXN1c2hpIFNIT0pJIDx5YXNoaUBhdG1hcmstdGVjaG5vLmNvbT4KICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMTMsNyArMTUsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjMsMTkgKzI1LDIxIEBACiAgKi8KIAogI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaWZkZWYJQ09ORklHX1hJTElOWF9VQVJUTElURQogCi0jaW5jbHVkZSA8YXNtL3NlcmlhbF94dWFydGxpdGUuaD4KKyNkZWZpbmUgUlhfRklGT19PRkZTRVQJCTAgLyogcmVjZWl2ZSBGSUZPLCByZWFkIG9ubHkgKi8KKyNkZWZpbmUgVFhfRklGT19PRkZTRVQJCTQgLyogdHJhbnNtaXQgRklGTywgd3JpdGUgb25seSAqLworI2RlZmluZSBTVEFUVVNfUkVHX09GRlNFVAk4IC8qIHN0YXR1cyByZWdpc3RlciwgcmVhZCBvbmx5ICovCiAKLS8qIEZJWE1FOiB3ZSBzaG91bGQgY29udmVydCB0aGVzZSB0byBpbjMyIGFuZCBvdXQzMiAqLwotI2RlZmluZSBJT19XT1JEKG9mZnNldCkJICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKG9mZnNldCkpCi0jZGVmaW5lIElPX1NFUklBTChvZmZzZXQpICAgIElPX1dPUkQoQ09ORklHX1NFUklBTF9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIFNSX1RYX0ZJRk9fRlVMTAkJMHgwOCAvKiB0cmFuc21pdCBGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgU1JfUlhfRklGT19WQUxJRF9EQVRBCTB4MDEgLyogZGF0YSBpbiByZWNlaXZlIEZJRk8gKi8KKyNkZWZpbmUgU1JfUlhfRklGT19GVUxMCQkweDAyIC8qIHJlY2VpdmUgRklGTyBmdWxsICovCiAKLSNkZWZpbmUgSU9fU0VSSUFMX1JYX0ZJRk8gICBJT19TRVJJQUwoWFVMX1JYX0ZJRk9fT0ZGU0VUKQotI2RlZmluZSBJT19TRVJJQUxfVFhfRklGTyAgIElPX1NFUklBTChYVUxfVFhfRklGT19PRkZTRVQpCi0jZGVmaW5lIElPX1NFUklBTF9TVEFUVVMgICAgSU9fU0VSSUFMKFhVTF9TVEFUVVNfUkVHX09GRlNFVCkKLSNkZWZpbmUgSU9fU0VSSUFMX0NPTlRST0wgICBJT19TRVJJQUwoWFVMX0NPTlRST0xfUkVHX09GRlNFVCkKKyNkZWZpbmUgVUFSVExJVEVfU1RBVFVTCQkoQ09ORklHX1NFUklBTF9CQVNFICsgU1RBVFVTX1JFR19PRkZTRVQpCisjZGVmaW5lIFVBUlRMSVRFX1RYX0ZJRk8JKENPTkZJR19TRVJJQUxfQkFTRSArIFRYX0ZJRk9fT0ZGU0VUKQorI2RlZmluZSBVQVJUTElURV9SWF9GSUZPCShDT05GSUdfU0VSSUFMX0JBU0UgKyBSWF9GSUZPX09GRlNFVCkKIAogaW50IHNlcmlhbF9pbml0KHZvaWQpCiB7CkBAIC01MCw5ICs1NCwxMCBAQAogCiB2b2lkIHNlcmlhbF9wdXRjKGNvbnN0IGNoYXIgYykKIHsKLQlpZiAoYyA9PSAnXG4nKSBzZXJpYWxfcHV0YygnXHInKTsKLQl3aGlsZSAoSU9fU0VSSUFMX1NUQVRVUyAmIFhVTF9TUl9UWF9GSUZPX0ZVTEwpOwotCUlPX1NFUklBTF9UWF9GSUZPID0gKHVuc2lnbmVkIGNoYXIpIChjICYgMHhmZik7CisJaWYgKGMgPT0gJ1xuJykKKwkJc2VyaWFsX3B1dGMoJ1xyJyk7CisJd2hpbGUgKGluX2JlMzIoKHUzMiAqKSBVQVJUTElURV9TVEFUVVMpICYgU1JfVFhfRklGT19GVUxMKTsKKwlvdXRfYmUzMigodTMyICopIFVBUlRMSVRFX1RYX0ZJRk8sICh1bnNpZ25lZCBjaGFyKSAoYyAmIDB4ZmYpKTsKIH0KIAogdm9pZCBzZXJpYWxfcHV0cyhjb25zdCBjaGFyICogcykKQEAgLTY0LDEzICs2OSwxMyBAQAogCiBpbnQgc2VyaWFsX2dldGModm9pZCkKIHsKLQl3aGlsZSAoIShJT19TRVJJQUxfU1RBVFVTICYgWFVMX1NSX1JYX0ZJRk9fVkFMSURfREFUQSkpOwotCXJldHVybiBJT19TRVJJQUxfUlhfRklGTyAmIDB4ZmY7CisJd2hpbGUgKCEoaW5fYmUzMigodTMyICopIFVBUlRMSVRFX1NUQVRVUykgJiBTUl9SWF9GSUZPX1ZBTElEX0RBVEEpKTsKKwlyZXR1cm4gaW5fYmUzMigodTMyICopIFVBUlRMSVRFX1JYX0ZJRk8pICYgMHhmZjsKIH0KIAogaW50IHNlcmlhbF90c3RjKHZvaWQpCiB7Ci0JcmV0dXJuIChJT19TRVJJQUxfU1RBVFVTICYgWFVMX1NSX1JYX0ZJRk9fVkFMSURfREFUQSk7CisJcmV0dXJuIChpbl9iZTMyKCh1MzIgKikgVUFSVExJVEVfU1RBVFVTKSAmIFNSX1JYX0ZJRk9fVkFMSURfREFUQSk7CiB9CiAKICNlbmRpZgkvKiBDT05GSUdfTUlDUk9CTFpFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC91c2J0dHkuYyBiL2RyaXZlcnMvc2VyaWFsL3VzYnR0eS5jCmluZGV4IGNjMmJkYWMuLjJiYzVjM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VzYnR0eS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3VzYnR0eS5jCkBAIC01MjksOCArNTI5LDggQEAKIAl9CiAJc25sZW4gPSBzdHJsZW4oc24pOwogCWlmIChzbmxlbiA+IHNpemVvZihzZXJpYWxfbnVtYmVyKSAtIDEpIHsKLQkJcHJpbnRmICgiV2FybmluZzogc2VyaWFsIG51bWJlciAlcyBpcyB0b28gbG9uZyAoJWQgPiAlZClcbiIsCi0JCQlzbiwgc25sZW4sIHNpemVvZihzZXJpYWxfbnVtYmVyKSAtIDEpOworCQlwcmludGYgKCJXYXJuaW5nOiBzZXJpYWwgbnVtYmVyICVzIGlzIHRvbyBsb25nICglZCA+ICVsdSlcbiIsCisJCQlzbiwgc25sZW4sICh1bG9uZykoc2l6ZW9mKHNlcmlhbF9udW1iZXIpIC0gMSkpOwogCQlzbmxlbiA9IHNpemVvZihzZXJpYWxfbnVtYmVyKSAtIDE7CiAJfQogCW1lbWNweSAoc2VyaWFsX251bWJlciwgc24sIHNubGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYmRjb3JlLmMgYi9kcml2ZXJzL3VzYi91c2JkY29yZS5jCmluZGV4IGE2MjFjZTcuLjgwOGRhOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3VzYmRjb3JlLmMKKysrIGIvZHJpdmVycy91c2IvdXNiZGNvcmUuYwpAQCAtNTQ2LDIxICs1NDYsMjMgQEAKICAqCiAgKiBOT1RFOiBlbmRwb2ludF9hZGRyZXNzIE1VU1QgY29udGFpbiBhIGRpcmVjdGlvbiBmbGFnLgogICovCi1zdHJ1Y3QgdXJiICp1c2JkX2FsbG9jX3VyYiAoc3RydWN0IHVzYl9kZXZpY2VfaW5zdGFuY2UgKmRldmljZSwgc3RydWN0IHVzYl9lbmRwb2ludF9pbnN0YW5jZSAqZW5kcG9pbnQpCitzdHJ1Y3QgdXJiICp1c2JkX2FsbG9jX3VyYiAoc3RydWN0IHVzYl9kZXZpY2VfaW5zdGFuY2UgKmRldmljZSwKKwkJCSAgICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2luc3RhbmNlICplbmRwb2ludCkKIHsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAKLQlpZiggISh1cmIgPSAoc3RydWN0IHVyYiopbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXJiKSkpICkgewotCSAgdXNiZXJyKCIgRiBBIFQgQSBMOiAgbWFsbG9jKCV1KSBGQUlMRUQhISEhIiwgc2l6ZW9mKHN0cnVjdCB1cmIpKTsKLQkgIHJldHVybiBOVUxMOworCWlmICghKHVyYiA9IChzdHJ1Y3QgdXJiICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdXJiKSkpKSB7CisJCXVzYmVyciAoIiBGIEEgVCBBIEw6ICBtYWxsb2MoJXUpIEZBSUxFRCEhISEiLAorCQkJc2l6ZW9mIChzdHJ1Y3QgdXJiKSk7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIEZpbGwgaW4ga25vd24gZmllbGRzICovCi0JbWVtc2V0KHVyYiwgMCwgc2l6ZW9mKHN0cnVjdCB1cmIpKTsKKwltZW1zZXQgKHVyYiwgMCwgc2l6ZW9mIChzdHJ1Y3QgdXJiKSk7CiAJdXJiLT5lbmRwb2ludCA9IGVuZHBvaW50OwogCXVyYi0+ZGV2aWNlID0gZGV2aWNlOwotCXVyYi0+YnVmZmVyID0gKHU4Kil1cmItPmJ1ZmZlcl9kYXRhOwotCXVyYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZih1cmItPmJ1ZmZlcl9kYXRhKTsKKwl1cmItPmJ1ZmZlciA9ICh1OCAqKSB1cmItPmJ1ZmZlcl9kYXRhOworCXVyYi0+YnVmZmVyX2xlbmd0aCA9IHNpemVvZiAodXJiLT5idWZmZXJfZGF0YSk7CiAKIAl1cmJfbGlua19pbml0ICgmdXJiLT5saW5rKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYjg2Mnh4LmMgYi9kcml2ZXJzL3ZpZGVvL21iODYyeHguYwppbmRleCA5Njg0Y2YzLi43MzNkOWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21iODYyeHguYworKysgYi9kcml2ZXJzL3ZpZGVvL21iODYyeHguYwpAQCAtMTczLDYgKzE3Myw4IEBACiAJREVfV1JfRklGTyAoMHgwOTQxMDAwMCk7CiAJREVfV1JfRklGTyAoMHgwMDAwMDAwMCk7CiAJREVfV1JfRklGTyAocEdELT53aW5TaXplWTw8MTYgfCBwR0QtPndpblNpemVYKTsKKwkvKiBzeW5jIHdpdGggU1cgYWNjZXNzIHRvIGZyYW1lYnVmZmVyICovCisJZGVfd2FpdCAoKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NPUkFMUCkKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3Rlc3RfYnVyc3QuYyBiL2V4YW1wbGVzL3Rlc3RfYnVyc3QuYwppbmRleCAzMTU3YmM4Li5kOGM1ZWQ0IDEwMDY0NAotLS0gYS9leGFtcGxlcy90ZXN0X2J1cnN0LmMKKysrIGIvZXhhbXBsZXMvdGVzdF9idXJzdC5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAlwWzJdID0gcGF0dGVybjsKIAogCXByaW50ZiAoIlxuRXJyb3IgYXQgc3RlcCAlcywgYWRkciAlMDhseDogcmVhZCAlMDhseCwgcGF0dGVybiAlMDhseCIsCi0JCSh1bnNpZ25lZCBsb25nKXN0ZXAsIGFkZHIsIHZhbCwgcGF0dGVybik7CisJCXN0ZXAsICh1bnNpZ25lZCBsb25nKWFkZHIsIHZhbCwgcGF0dGVybik7CiB9CiAKIHN0YXRpYyB2b2lkIHNpZ25hbF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9qZmZzMl8xcGFzcy5jIGIvZnMvamZmczIvamZmczJfMXBhc3MuYwppbmRleCBkMTQyM2MxLi44YTA2Nzc3IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9qZmZzMl8xcGFzcy5jCisrKyBiL2ZzL2pmZnMyL2pmZnMyXzFwYXNzLmMKQEAgLTEyMTMsMTYgKzEyMTMsMTggQEAKIAkJCX0gZWxzZSBpZiAobm9kZS0+bm9kZXR5cGUgPT0gSkZGUzJfTk9ERVRZUEVfQ0xFQU5NQVJLRVIpIHsKIAkJCQlpZiAobm9kZS0+dG90bGVuICE9IHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSkKIAkJCQkJcHJpbnRmKCJPT1BTIENsZWFubWFya2VyIGhhcyBiYWQgc2l6ZSAiCi0JCQkJCQkiJWQgIT0gJWRcbiIsIG5vZGUtPnRvdGxlbiwKKwkJCQkJCSIlZCAhPSAlenVcbiIsCisJCQkJCQlub2RlLT50b3RsZW4sCiAJCQkJCQlzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpOwogCQkJfSBlbHNlIGlmIChub2RlLT5ub2RldHlwZSA9PSBKRkZTMl9OT0RFVFlQRV9QQURESU5HKSB7CiAJCQkJaWYgKG5vZGUtPnRvdGxlbiA8IHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSkKIAkJCQkJcHJpbnRmKCJPT1BTIFBhZGRpbmcgaGFzIGJhZCBzaXplICIKLQkJCQkJCSIlZCA8ICVkXG4iLCBub2RlLT50b3RsZW4sCisJCQkJCQkiJWQgPCAlenVcbiIsCisJCQkJCQlub2RlLT50b3RsZW4sCiAJCQkJCQlzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpOwogCQkJfSBlbHNlIHsKLQkJCQlwcmludGYoIlVua25vd24gbm9kZSB0eXBlOiAleCBsZW4gJWQgIgotCQkJCQkib2Zmc2V0IDB4JXhcbiIsIG5vZGUtPm5vZGV0eXBlLAorCQkJCXByaW50ZigiVW5rbm93biBub2RlIHR5cGU6ICV4IGxlbiAlZCBvZmZzZXQgMHgleFxuIiwKKwkJCQkJbm9kZS0+bm9kZXR5cGUsCiAJCQkJCW5vZGUtPnRvdGxlbiwgb2Zmc2V0KTsKIAkJCX0KIAkJCW9mZnNldCArPSAoKG5vZGUtPnRvdGxlbiArIDMpICYgfjMpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvamZmczJfbmFuZF8xcGFzcy5jIGIvZnMvamZmczIvamZmczJfbmFuZF8xcGFzcy5jCmluZGV4IGQ5NWY1NTEuLjNjZTljOTggMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2pmZnMyX25hbmRfMXBhc3MuYworKysgYi9mcy9qZmZzMi9qZmZzMl9uYW5kXzFwYXNzLmMKQEAgLTg2NCwxNiArODY0LDE4IEBACiAJCQl9IGVsc2UgaWYgKG5vZGUtPm5vZGV0eXBlID09IEpGRlMyX05PREVUWVBFX0NMRUFOTUFSS0VSKSB7CiAJCQkJaWYgKG5vZGUtPnRvdGxlbiAhPSBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpCiAJCQkJCXByaW50ZigiT09QUyBDbGVhbm1hcmtlciBoYXMgYmFkIHNpemUgIgotCQkJCQkJIiVkICE9ICVkXG4iLCBub2RlLT50b3RsZW4sCisJCQkJCQkiJWQgIT0gJXp1XG4iLAorCQkJCQkJbm9kZS0+dG90bGVuLAogCQkJCQkJc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKTsKIAkJCX0gZWxzZSBpZiAobm9kZS0+bm9kZXR5cGUgPT0gSkZGUzJfTk9ERVRZUEVfUEFERElORykgewogCQkJCWlmIChub2RlLT50b3RsZW4gPCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpCiAJCQkJCXByaW50ZigiT09QUyBQYWRkaW5nIGhhcyBiYWQgc2l6ZSAiCi0JCQkJCQkiJWQgPCAlZFxuIiwgbm9kZS0+dG90bGVuLAorCQkJCQkJIiVkIDwgJXp1XG4iLAorCQkJCQkJbm9kZS0+dG90bGVuLAogCQkJCQkJc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRmKCJVbmtub3duIG5vZGUgdHlwZTogJXggbGVuICVkICIKLQkJCQkJIm9mZnNldCAweCV4XG4iLCBub2RlLT5ub2RldHlwZSwKKwkJCQlwcmludGYoIlVua25vd24gbm9kZSB0eXBlOiAleCBsZW4gJWQgb2Zmc2V0IDB4JXhcbiIsCisJCQkJCW5vZGUtPm5vZGV0eXBlLAogCQkJCQlub2RlLT50b3RsZW4sIG9mZnNldCk7CiAJCQl9CiAJCQlvZmZzZXQgKz0gKChub2RlLT50b3RsZW4gKyAzKSAmIH4zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGltZXIuaCBiL2luY2x1ZGUvYXNtLW02OGsvdGltZXIuaAppbmRleCAwMzA3MjBjLi4xYTVkZTA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3RpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90aW1lci5oCkBAIC0zMyw3ICszMyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERNQSBUaW1lciBtb2R1bGUgcmVnaXN0ZXJzICovCiB0eXBlZGVmIHN0cnVjdCBkdGltZXJfY3RybCB7Ci0jaWYgZGVmaW5lZChDT05GSUdfTTUyNDkpIHx8IGRlZmluZWQoQ09ORklHX001MjUzKQorI2lmIGRlZmluZWQoQ09ORklHX001MjQ5KSB8fCBkZWZpbmVkKENPTkZJR19NNTI1MykgfHwgZGVmaW5lZChDT05GSUdfTTUyNzIpCiAJdTE2IHRtcjsJCS8qIDB4MDAgTW9kZSByZWdpc3RlciAqLwogCXUxNiByZXMxOwkJLyogMHgwMiAqLwogCXUxNiB0cnI7CQkvKiAweDA0IFJlZmVyZW5jZSByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9hcmNoLW1pY3JvYmxhemUveGJhc2ljX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2FyY2gtbWljcm9ibGF6ZS94YmFzaWNfdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUwMTJlNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2FyY2gtbWljcm9ibGF6ZS94YmFzaWNfdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qICAgICBBdXRob3I6IFhpbGlueCwgSW5jLgotKgotKgotKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSogICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKiAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotKiAgICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSoKLSoKLSogICAgIFhJTElOWCBJUyBQUk9WSURJTkcgVEhJUyBERVNJR04sIENPREUsIE9SIElORk9STUFUSU9OICJBUyBJUyIgQVMgQQotKiAgICAgQ09VUlRFU1kgVE8gWU9VLiBCWSBQUk9WSURJTkcgVEhJUyBERVNJR04sIENPREUsIE9SIElORk9STUFUSU9OIEFTCi0qICAgICBPTkUgUE9TU0lCTEUgSU1QTEVNRU5UQVRJT04gT0YgVEhJUyBGRUFUVVJFLCBBUFBMSUNBVElPTiBPUiBTVEFOREFSRCwKLSogICAgIFhJTElOWCBJUyBNQUtJTkcgTk8gUkVQUkVTRU5UQVRJT04gVEhBVCBUSElTIElNUExFTUVOVEFUSU9OIElTIEZSRUUKLSogICAgIEZST00gQU5ZIENMQUlNUyBPRiBJTkZSSU5HRU1FTlQsIEFORCBZT1UgQVJFIFJFU1BPTlNJQkxFIEZPUiBPQlRBSU5JTkcKLSogICAgIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMgWU9VIE1BWSBSRVFVSVJFIEZPUiBZT1VSIElNUExFTUVOVEFUSU9OLgotKiAgICAgWElMSU5YIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPCi0qICAgICBUSEUgQURFUVVBQ1kgT0YgVEhFIElNUExFTUVOVEFUSU9OLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWQotKiAgICAgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgVEhBVCBUSElTIElNUExFTUVOVEFUSU9OIElTIEZSRUUgRlJPTQotKiAgICAgQ0xBSU1TIE9GIElORlJJTkdFTUVOVCwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKLSogICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKgotKgotKiAgICAgWGlsaW54IGhhcmR3YXJlIHByb2R1Y3RzIGFyZSBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiBsaWZlIHN1cHBvcnQKLSogICAgIGFwcGxpYW5jZXMsIGRldmljZXMsIG9yIHN5c3RlbXMuIFVzZSBpbiBzdWNoIGFwcGxpY2F0aW9ucyBpcwotKiAgICAgZXhwcmVzc2x5IHByb2hpYml0ZWQuCi0qCi0qCi0qICAgICAoYykgQ29weXJpZ2h0IDIwMDItMjAwMyBYaWxpbnggSW5jLgotKiAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSoKLSogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0qICAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotKiAgICAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogQGZpbGUgeGJhc2ljX3R5cGVzLmgKLSoKLSogVGhpcyBmaWxlIGNvbnRhaW5zIGJhc2ljIHR5cGVzIGZvciBYaWxpbnggc29mdHdhcmUgSVAuICBUaGVzZSB0eXBlcyBkbyBub3QKLSogZm9sbG93IHRoZSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbiB3aXRoIHJlc3BlY3QgdG8gdXNpbmcgdGhlIGNvbXBvbmVudAotKiBuYW1lIGluIGZyb250IG9mIGVhY2ggbmFtZSBiZWNhdXNlIHRoZXkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcHJpbWl0aXZlcy4KLSoKLSogQG5vdGUKLSoKLSogVGhpcyBmaWxlIGNvbnRhaW5zIGl0ZW1zIHdoaWNoIGFyZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgotKgotKiA8cHJlPgotKiBNT0RJRklDQVRJT04gSElTVE9SWToKLSoKLSogVmVyCSBXaG8JRGF0ZQlDaGFuZ2VzCi0qIC0tLS0tIC0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogMS4wMGEgcm1tICAxMi8xNC8wMSBGaXJzdCByZWxlYXNlCi0qCXJtbSAgMDUvMDkvMDMgQWRkZWQgInhhc3NlcnQgYWx3YXlzIiBtYWNyb3MgdG8gcmlkIG91cnNlbHZlcyBvZiBkaWFiCi0qCQkgICAgICBjb21waWxlciB3YXJuaW5ncwotKiA8L3ByZT4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBYQkFTSUNfVFlQRVNfSAkJLyogcHJldmVudCBjaXJjdWxhciBpbmNsdXNpb25zICovCi0jZGVmaW5lIFhCQVNJQ19UWVBFU19ICQkvKiBieSB1c2luZyBwcm90ZWN0aW9uIG1hY3JvcyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogSW5jbHVkZSBGaWxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBDb25zdGFudCBEZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUgMQotI2VuZGlmCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFIDAKLSNlbmRpZgotCi0jaWZuZGVmIE5VTEwKLSNkZWZpbmUgTlVMTCAwCi0jZW5kaWYKLS8qKiBOdWxsICovCi0KLSNkZWZpbmUgWENPTVBPTkVOVF9JU19SRUFEWQkweDExMTExMTExCS8qIGNvbXBvbmVudCBoYXMgYmVlbiBpbml0aWFsaXplZCAqLwotI2RlZmluZSBYQ09NUE9ORU5UX0lTX1NUQVJURUQJMHgyMjIyMjIyMgkvKiBjb21wb25lbnQgaGFzIGJlZW4gc3RhcnRlZCAqLwotCi0vKiB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhbmQgZGVjbGFyYXRpb25zIGFyZSBmb3IgdW5pdCB0ZXN0IHB1cnBvc2VzIGFuZCBhcmUKLSAqIGRlc2lnbmVkIHRvIGJlIHVzZWQgaW4gdGVzdCBhcHBsaWNhdGlvbnMuCi0gKi8KLSNkZWZpbmUgWFRFU1RfUEFTU0VECTAKLSNkZWZpbmUgWFRFU1RfRkFJTEVECTEKLQotI2RlZmluZSBYQVNTRVJUX05PTkUJIDAKLSNkZWZpbmUgWEFTU0VSVF9PQ0NVUlJFRCAxCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgWEFzc2VydFN0YXR1czsKLWV4dGVybiB2b2lkIFhBc3NlcnQoY2hhciAqLCBpbnQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUeXBlIERlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKiBAbmFtZSBQcmltaXRpdmUgdHlwZXMKLSAqIFRoZXNlIHByaW1pdGl2ZSB0eXBlcyBhcmUgY3JlYXRlZCBmb3IgdHJhbnNwb3J0YWJpbGl0eS4KLSAqIFRoZXkgYXJlIGRlcGVuZGVudCB1cG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgotICogQHsKLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1MzIgVXBwZXI7Ci0JdTMyIExvd2VyOwotfSBYdWludDY0OwotCi0vKiBYaWxpbngncyB1bnNpZ25lZCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmIHUzMiBYdWludDMyOwotdHlwZWRlZiB1MTYgWHVpbnQxNjsKLXR5cGVkZWYgdTggWHVpbnQ4OwotCi0vKiBhbmQgc2lnbmVkIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYgczMyIFhpbnQzMjsKLXR5cGVkZWYgczE2IFhpbnQxNjsKLXR5cGVkZWYgczggWGludDg7Ci0KLSNpZm5kZWYgTlVMTAotI2RlZmluZSBOVUxMIDAKLSNlbmRpZgotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgWGJvb2xlYW47Ci0jZGVmaW5lIFhOVUxMCU5VTEwKLQotI2RlZmluZSBYVFJVRQkxCi0jZGVmaW5lIFhGQUxTRQkwCi0KLS8qQH0qLwotCi0vKioKLSAqIFRoaXMgZGF0YSB0eXBlIGRlZmluZXMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGEgZGV2aWNlLgotICogVGhlIGFyZ3VtZW50IHBvaW50cyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudAotICovCi10eXBlZGVmIHZvaWQgKCpYSW50ZXJydXB0SGFuZGxlcikgKHZvaWQgKkluc3RhbmNlUHRyKTsKLQotLyoqCi0gKiBUaGlzIGRhdGEgdHlwZSBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGFuCi0gKiBhc3NlcnQgb2NjdXJzLiBUaGUgY2FsbGJhY2sgaXMgaW52b2tlZCBvbmx5IHdoZW4gYXNzZXJ0cyBhcmUgZW5hYmxlZAotICovCi10eXBlZGVmIHZvaWQgKCpYQXNzZXJ0Q2FsbGJhY2spIChjaGFyICpGaWxlbmFtZVB0ciwgaW50IExpbmVOdW1iZXIpOwotCi0vKioqKioqKioqKioqKioqKiogTWFjcm9zIChJbmxpbmUgRnVuY3Rpb25zKSBEZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKiBSZXR1cm4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgaGFsZiBvZiB0aGUgNjQgYml0IGRhdGEgdHlwZS4KLSoKLSogQHBhcmFtIHggaXMgdGhlIDY0IGJpdCB3b3JkLgotKgotKiBAcmV0dXJuCi0qCi0qIFRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSA2NCBiaXQgd29yZC4KLSoKLSogQG5vdGUKLSoKLSogTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVJTlQ2NF9NU1coeCkgKCh4KS5VcHBlcikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qIFJldHVybiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgaGFsZiBvZiB0aGUgNjQgYml0IGRhdGEgdHlwZS4KLSoKLSogQHBhcmFtIHggaXMgdGhlIDY0IGJpdCB3b3JkLgotKgotKiBAcmV0dXJuCi0qCi0qIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSA2NCBiaXQgd29yZC4KLSoKLSogQG5vdGUKLSoKLSogTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVJTlQ2NF9MU1coeCkgKCh4KS5Mb3dlcikKLQotI2lmbmRlZiBOREVCVUcKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qIFRoaXMgYXNzZXJ0IG1hY3JvIGlzIHRvIGJlIHVzZWQgZm9yIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCByZXR1cm4gYW55dGhpbmcKLSogKHZvaWQpLiBUaGlzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFhXYWl0SW5Bc3NlcnQgYm9vbGVhbiBjYW4gYmUgdXNlZCB0bwotKiBhY2NvbW9kYXRlIHRlc3RzIHNvIHRoYXQgYXNzZXJ0cyB3aGljaCBmYWlsIGFsbG93IGV4ZWN1dGlvbiB0byBjb250aW51ZS4KLSoKLSogQHBhcmFtIGV4cHJlc3Npb24gaXMgdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuIElmIGl0IGV2YWx1YXRlcyB0byBmYWxzZSwKLSoJIHRoZSBhc3NlcnQgb2NjdXJzLgotKgotKiBAcmV0dXJuCi0qCi0qIFJldHVybnMgdm9pZCB1bmxlc3MgdGhlIFhXYWl0SW5Bc3NlcnQgdmFyaWFibGUgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZQotKiBubyByZXR1cm4gaXMgbWFkZSBhbmQgYW4gaW5maW5pdGUgbG9vcCBpcyBlbnRlcmVkLgotKgotKiBAbm90ZQotKgotKiBOb25lLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYQVNTRVJUX1ZPSUQoZXhwcmVzc2lvbikJCQlcCi17CQkJCQkJCVwKLQlpZiAoZXhwcmVzc2lvbikgewkJCQlcCi0JCVhBc3NlcnRTdGF0dXMgPSBYQVNTRVJUX05PTkU7CQlcCi0JfSBlbHNlIHsJCQkJCVwKLQkJWEFzc2VydChfX0ZJTEVfXywgX19MSU5FX18pOwkJXAotCQlYQXNzZXJ0U3RhdHVzID0gWEFTU0VSVF9PQ0NVUlJFRDsJXAotCQlyZXR1cm47CQkJCQlcCi0JfQkJCQkJCVwKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qIFRoaXMgYXNzZXJ0IG1hY3JvIGlzIHRvIGJlIHVzZWQgZm9yIGZ1bmN0aW9ucyB0aGF0IGRvIHJldHVybiBhIHZhbHVlLiBUaGlzIGluCi0qIGNvbmp1bmN0aW9uIHdpdGggdGhlIFhXYWl0SW5Bc3NlcnQgYm9vbGVhbiBjYW4gYmUgdXNlZCB0byBhY2NvbW9kYXRlIHRlc3RzIHNvCi0qIHRoYXQgYXNzZXJ0cyB3aGljaCBmYWlsIGFsbG93IGV4ZWN1dGlvbiB0byBjb250aW51ZS4KLSoKLSogQHBhcmFtIGV4cHJlc3Npb24gaXMgdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuIElmIGl0IGV2YWx1YXRlcyB0byBmYWxzZSwKLSoJIHRoZSBhc3NlcnQgb2NjdXJzLgotKgotKiBAcmV0dXJuCi0qCi0qIFJldHVybnMgMCB1bmxlc3MgdGhlIFhXYWl0SW5Bc3NlcnQgdmFyaWFibGUgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZQotKiBubyByZXR1cm4gaXMgbWFkZSBhbmQgYW4gaW5maW5pdGUgbG9vcCBpcyBlbnRlcmVkLgotKgotKiBAbm90ZQotKgotKiBOb25lLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYQVNTRVJUX05PTlZPSUQoZXhwcmVzc2lvbikJCQlcCi17CQkJCQkJCVwKLQlpZiAoZXhwcmVzc2lvbikgewkJCQlcCi0JCVhBc3NlcnRTdGF0dXMgPSBYQVNTRVJUX05PTkU7CQlcCi0JfSBlbHNlIHsJCQkJCVwKLQkJWEFzc2VydChfX0ZJTEVfXywgX19MSU5FX18pOwkJXAotCQlYQXNzZXJ0U3RhdHVzID0gWEFTU0VSVF9PQ0NVUlJFRDsJXAotCQlyZXR1cm4gMDsJCQkJXAotCX0JCQkJCQlcCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKiBBbHdheXMgYXNzZXJ0LiBUaGlzIGFzc2VydCBtYWNybyBpcyB0byBiZSB1c2VkIGZvciBmdW5jdGlvbnMgdGhhdCBkbyBub3QKLSogcmV0dXJuIGFueXRoaW5nICh2b2lkKS4gVXNlIGZvciBpbnN0YW5jZXMgd2hlcmUgYW4gYXNzZXJ0IHNob3VsZCBhbHdheXMKLSogb2NjdXIuCi0qCi0qIEByZXR1cm4KLSoKLSogUmV0dXJucyB2b2lkIHVubGVzcyB0aGUgWFdhaXRJbkFzc2VydCB2YXJpYWJsZSBpcyB0cnVlLCBpbiB3aGljaCBjYXNlCi0qIG5vIHJldHVybiBpcyBtYWRlIGFuZCBhbiBpbmZpbml0ZSBsb29wIGlzIGVudGVyZWQuCi0qCi0qIEBub3RlCi0qCi0qIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFhBU1NFUlRfVk9JRF9BTFdBWVMoKQkJCQlcCi17CQkJCQkJCVwKLQlYQXNzZXJ0KF9fRklMRV9fLCBfX0xJTkVfXyk7CQkJXAotCVhBc3NlcnRTdGF0dXMgPSBYQVNTRVJUX09DQ1VSUkVEOwkJXAotCXJldHVybjsJCQkJCQlcCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKiBBbHdheXMgYXNzZXJ0LiBUaGlzIGFzc2VydCBtYWNybyBpcyB0byBiZSB1c2VkIGZvciBmdW5jdGlvbnMgdGhhdCBkbyByZXR1cm4KLSogYSB2YWx1ZS4gVXNlIGZvciBpbnN0YW5jZXMgd2hlcmUgYW4gYXNzZXJ0IHNob3VsZCBhbHdheXMgb2NjdXIuCi0qCi0qIEByZXR1cm4KLSoKLSogUmV0dXJucyB2b2lkIHVubGVzcyB0aGUgWFdhaXRJbkFzc2VydCB2YXJpYWJsZSBpcyB0cnVlLCBpbiB3aGljaCBjYXNlCi0qIG5vIHJldHVybiBpcyBtYWRlIGFuZCBhbiBpbmZpbml0ZSBsb29wIGlzIGVudGVyZWQuCi0qCi0qIEBub3RlCi0qCi0qIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFhBU1NFUlRfTk9OVk9JRF9BTFdBWVMoKQkJCVwKLXsJCQkJCQkJXAotCVhBc3NlcnQoX19GSUxFX18sIF9fTElORV9fKTsJCQlcCi0JWEFzc2VydFN0YXR1cyA9IFhBU1NFUlRfT0NDVVJSRUQ7CQlcCi0JcmV0dXJuIDA7CQkJCQlcCi19Ci0KLSNlbHNlCi0KLSNkZWZpbmUgWEFTU0VSVF9WT0lEKGV4cHJlc3Npb24pCi0jZGVmaW5lIFhBU1NFUlRfVk9JRF9BTFdBWVMoKQotI2RlZmluZSBYQVNTRVJUX05PTlZPSUQoZXhwcmVzc2lvbikKLSNkZWZpbmUgWEFTU0VSVF9OT05WT0lEX0FMV0FZUygpCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqIEZ1bmN0aW9uIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIFhBc3NlcnRTZXRDYWxsYmFjayhYQXNzZXJ0Q2FsbGJhY2sgUm91dGluZSk7Ci0KLSNlbmRpZgkvKiBlbmQgb2YgcHJvdGVjdGlvbiBtYWNybyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9hcmNoLW1pY3JvYmxhemUveGlvLmggYi9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2FyY2gtbWljcm9ibGF6ZS94aW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VlZDMyNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2FyY2gtbWljcm9ibGF6ZS94aW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiB4aW8uaAotICoKLSAqIERlZmluZXMgWElvIGZ1bmN0aW9ucyBmb3IgWGlsaW54IE9DUCBpbiB0ZXJtcyBvZiBMaW51eCBwcmltaXRpdmVzCi0gKgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogMjAwMiAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQKLSAqICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpZm5kZWYgWElPX0gKLSNkZWZpbmUgWElPX0gKLQotI2luY2x1ZGUgInhiYXNpY190eXBlcy5oIgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi10eXBlZGVmIHUzMiBYSW9fQWRkcmVzczsKLQotZXh0ZXJuIGlubGluZSB1OAotWElvX0luOChYSW9fQWRkcmVzcyBJbkFkZHJlc3MpCi17Ci0JcmV0dXJuICh1OCkgaW5fOCgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBJbkFkZHJlc3MpOwotfQotZXh0ZXJuIGlubGluZSB1MTYKLVhJb19JbjE2KFhJb19BZGRyZXNzIEluQWRkcmVzcykKLXsKLQlyZXR1cm4gKHUxNikgaW5fYmUxNigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgSW5BZGRyZXNzKTsKLX0KLWV4dGVybiBpbmxpbmUgdTMyCi1YSW9fSW4zMihYSW9fQWRkcmVzcyBJbkFkZHJlc3MpCi17Ci0JcmV0dXJuICh1MzIpIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopIEluQWRkcmVzcyk7Ci19Ci1leHRlcm4gaW5saW5lIHZvaWQKLVhJb19PdXQ4KFhJb19BZGRyZXNzIE91dEFkZHJlc3MsIHU4IFZhbHVlKQotewotCW91dF84KCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIE91dEFkZHJlc3MsIFZhbHVlKTsKLX0KLWV4dGVybiBpbmxpbmUgdm9pZAotWElvX091dDE2KFhJb19BZGRyZXNzIE91dEFkZHJlc3MsIHUxNiBWYWx1ZSkKLXsKLQlvdXRfYmUxNigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgT3V0QWRkcmVzcywgVmFsdWUpOwotfQotZXh0ZXJuIGlubGluZSB2b2lkCi1YSW9fT3V0MzIoWElvX0FkZHJlc3MgT3V0QWRkcmVzcywgdTMyIFZhbHVlKQotewotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKSBPdXRBZGRyZXNzLCBWYWx1ZSk7Ci19Ci0KLSNkZWZpbmUgWElvX1RvTGl0dGxlRW5kaWFuMTYocyxkKSAoKih1MTYqKShkKSA9IGNwdV90b19sZTE2KCh1MTYpKHMpKSkKLSNkZWZpbmUgWElvX1RvTGl0dGxlRW5kaWFuMzIocyxkKSAoKih1MzIqKShkKSA9IGNwdV90b19sZTMyKCh1MzIpKHMpKSkKLSNkZWZpbmUgWElvX1RvQmlnRW5kaWFuMTYocyxkKSAoKih1MTYqKShkKSA9IGNwdV90b19iZTE2KCh1MTYpKHMpKSkKLSNkZWZpbmUgWElvX1RvQmlnRW5kaWFuMzIocyxkKSAoKih1MzIqKShkKSA9IGNwdV90b19iZTMyKCh1MzIpKHMpKSkKLQotI2RlZmluZSBYSW9fRnJvbUxpdHRsZUVuZGlhbjE2KHMsZCkgKCoodTE2KikoZCkgPSBsZTE2X3RvX2NwdSgodTE2KShzKSkpCi0jZGVmaW5lIFhJb19Gcm9tTGl0dGxlRW5kaWFuMzIocyxkKSAoKih1MzIqKShkKSA9IGxlMzJfdG9fY3B1KCh1MzIpKHMpKSkKLSNkZWZpbmUgWElvX0Zyb21CaWdFbmRpYW4xNihzLGQpICgqKHUxNiopKGQpID0gYmUxNl90b19jcHUoKHUxNikocykpKQotI2RlZmluZSBYSW9fRnJvbUJpZ0VuZGlhbjMyKHMsZCkgKCoodTMyKikoZCkgPSBiZTMyX3RvX2NwdSgodTMyKShzKSkpCi0KLSNlbmRpZgkJCQkvKiBYSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9hcmNoLW1pY3JvYmxhemUveHVhcnRsaXRlX2wuaCBiL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvYXJjaC1taWNyb2JsYXplL3h1YXJ0bGl0ZV9sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzODFhMGQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9hcmNoLW1pY3JvYmxhemUveHVhcnRsaXRlX2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSoJWElMSU5YIElTIFBST1ZJRElORyBUSElTIERFU0lHTiwgQ09ERSwgT1IgSU5GT1JNQVRJT04gIkFTIElTIgotKglBUyBBIENPVVJURVNZIFRPIFlPVSwgU09MRUxZIEZPUiBVU0UgSU4gREVWRUxPUElORyBQUk9HUkFNUyBBTkQKLSoJU09MVVRJT05TIEZPUiBYSUxJTlggREVWSUNFUy4gIEJZIFBST1ZJRElORyBUSElTIERFU0lHTiwgQ09ERSwKLSoJT1IgSU5GT1JNQVRJT04gQVMgT05FIFBPU1NJQkxFIElNUExFTUVOVEFUSU9OIE9GIFRISVMgRkVBVFVSRSwKLSoJQVBQTElDQVRJT04gT1IgU1RBTkRBUkQsIFhJTElOWCBJUyBNQUtJTkcgTk8gUkVQUkVTRU5UQVRJT04KLSoJVEhBVCBUSElTIElNUExFTUVOVEFUSU9OIElTIEZSRUUgRlJPTSBBTlkgQ0xBSU1TIE9GIElORlJJTkdFTUVOVCwKLSoJQU5EIFlPVSBBUkUgUkVTUE9OU0lCTEUgRk9SIE9CVEFJTklORyBBTlkgUklHSFRTIFlPVSBNQVkgUkVRVUlSRQotKglGT1IgWU9VUiBJTVBMRU1FTlRBVElPTi4gIFhJTElOWCBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWQotKglXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUgQURFUVVBQ1kgT0YgVEhFCi0qCUlNUExFTUVOVEFUSU9OLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9SCi0qCVJFUFJFU0VOVEFUSU9OUyBUSEFUIFRISVMgSU1QTEVNRU5UQVRJT04gSVMgRlJFRSBGUk9NIENMQUlNUyBPRgotKglJTkZSSU5HRU1FTlQsIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSoJRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKgotKgkoYykgQ29weXJpZ2h0IDIwMDIgWGlsaW54IEluYy4KLSoJQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogQGZpbGUgeHVhcnRsaXRlX2wuaAotKgotKiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIGlkZW50aWZpZXJzIGFuZCBsb3ctbGV2ZWwgZHJpdmVyIGZ1bmN0aW9ucyAob3IKLSogbWFjcm9zKSB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgZGV2aWNlLiAgSGlnaC1sZXZlbCBkcml2ZXIgZnVuY3Rpb25zCi0qIGFyZSBkZWZpbmVkIGluIHh1YXJ0bGl0ZS5oLgotKgotKiA8cHJlPgotKiBNT0RJRklDQVRJT04gSElTVE9SWToKLSoKLSogVmVyCVdobyAgRGF0ZSAgICAgQ2hhbmdlcwotKiAtLS0tLSAtLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIDEuMDBiIHJwbSAgMDQvMjUvMDIgRmlyc3QgcmVsZWFzZQotKiA8L3ByZT4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIFhVQVJUTElURV9MX0ggLyogcHJldmVudCBjaXJjdWxhciBpbmNsdXNpb25zICovCi0jZGVmaW5lIFhVQVJUTElURV9MX0ggLyogYnkgdXNpbmcgcHJvdGVjdGlvbiBtYWNyb3MgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEluY2x1ZGUgRmlsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJ4YmFzaWNfdHlwZXMuaCIKLSNpbmNsdWRlICJ4aW8uaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqIENvbnN0YW50IERlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFVBUlQgTGl0ZSByZWdpc3RlciBvZmZzZXRzICovCi0KLSNkZWZpbmUgWFVMX1JYX0ZJRk9fT0ZGU0VUCQkwICAgLyogcmVjZWl2ZSBGSUZPLCByZWFkIG9ubHkgKi8KLSNkZWZpbmUgWFVMX1RYX0ZJRk9fT0ZGU0VUCQk0ICAgLyogdHJhbnNtaXQgRklGTywgd3JpdGUgb25seSAqLwotI2RlZmluZSBYVUxfU1RBVFVTX1JFR19PRkZTRVQJCTggICAvKiBzdGF0dXMgcmVnaXN0ZXIsIHJlYWQgb25seSAqLwotI2RlZmluZSBYVUxfQ09OVFJPTF9SRUdfT0ZGU0VUCQkxMiAgLyogY29udHJvbCByZWdpc3Rlciwgd3JpdGUgb25seSAqLwotCi0vKiBjb250cm9sIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKi8KLQotI2RlZmluZSBYVUxfQ1JfRU5BQkxFX0lOVFIJCTB4MTAJLyogZW5hYmxlIGludGVycnVwdCAqLwotI2RlZmluZSBYVUxfQ1JfRklGT19SWF9SRVNFVAkJMHgwMgkvKiByZXNldCByZWNlaXZlIEZJRk8gKi8KLSNkZWZpbmUgWFVMX0NSX0ZJRk9fVFhfUkVTRVQJCTB4MDEJLyogcmVzZXQgdHJhbnNtaXQgRklGTyAqLwotCi0vKiBzdGF0dXMgcmVnaXN0ZXIgYml0IHBvc2l0aW9ucyAqLwotCi0jZGVmaW5lIFhVTF9TUl9QQVJJVFlfRVJST1IJCTB4ODAKLSNkZWZpbmUgWFVMX1NSX0ZSQU1JTkdfRVJST1IJCTB4NDAKLSNkZWZpbmUgWFVMX1NSX09WRVJSVU5fRVJST1IJCTB4MjAKLSNkZWZpbmUgWFVMX1NSX0lOVFJfRU5BQkxFRAkJMHgxMAkvKiBpbnRlcnJ1cHQgZW5hYmxlZCAqLwotI2RlZmluZSBYVUxfU1JfVFhfRklGT19GVUxMCQkweDA4CS8qIHRyYW5zbWl0IEZJRk8gZnVsbCAqLwotI2RlZmluZSBYVUxfU1JfVFhfRklGT19FTVBUWQkJMHgwNAkvKiB0cmFuc21pdCBGSUZPIGVtcHR5ICovCi0jZGVmaW5lIFhVTF9TUl9SWF9GSUZPX0ZVTEwJCTB4MDIJLyogcmVjZWl2ZSBGSUZPIGZ1bGwgKi8KLSNkZWZpbmUgWFVMX1NSX1JYX0ZJRk9fVkFMSURfREFUQQkweDAxCS8qIGRhdGEgaW4gcmVjZWl2ZSBGSUZPICovCi0KLS8qIHRoZSBmb2xsb3dpbmcgY29uc3RhbnQgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBGSUZPcywgdGhlIHNpemUgb2YgdGhlCi0gKiBGSUZPcyBpbmNsdWRlcyB0aGUgdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyIHN1Y2ggdGhhdCBpdCBpcyB0aGUgdG90YWwgbnVtYmVyCi0gKiBvZiBieXRlcyB0aGF0IHRoZSBVQVJUIGNhbiBidWZmZXIKLSAqLwotI2RlZmluZSBYVUxfRklGT19TSVpFCQkgICAgMTYKLQotLyogU3RvcCBiaXRzIGFyZSBmaXhlZCBhdCAxLiBCYXVkLCBwYXJpdHksIGFuZCBkYXRhIGJpdHMgYXJlIGZpeGVkIG9uIGEKLSAqIHBlciBpbnN0YW5jZSBiYXNpcwotICovCi0jZGVmaW5lIFhVTF9TVE9QX0JJVFMJCSAgICAxCi0KLS8qIFBhcml0eSBkZWZpbml0aW9ucwotICovCi0jZGVmaW5lIFhVTF9QQVJJVFlfTk9ORQkJICAgIDAKLSNkZWZpbmUgWFVMX1BBUklUWV9PREQJCSAgICAxCi0jZGVmaW5lIFhVTF9QQVJJVFlfRVZFTgkJICAgIDIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogVHlwZSBEZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKiBNYWNyb3MgKElubGluZSBGdW5jdGlvbnMpIERlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogTG93LWxldmVsIGRyaXZlciBtYWNyb3MgYW5kIGZ1bmN0aW9ucy4gVGhlIGxpc3QgYmVsb3cgcHJvdmlkZXMgc2lnbmF0dXJlcwotKiB0byBoZWxwIHRoZSB1c2VyIHVzZSB0aGUgbWFjcm9zLgotKgotKiB2b2lkIFhVYXJ0TGl0ZV9tU2V0Q29udHJvbFJlZyh1MzIgQmFzZUFkZHJlc3MsIHUzMiBNYXNrKQotKiB1MzIgWFVhcnRMaXRlX21HZXRDb250cm9sUmVnKHUzMiBCYXNlQWRkcmVzcykKLSogdTMyIFhVYXJ0TGl0ZV9tR2V0U3RhdHVzUmVnKHUzMiBCYXNlQWRkcmVzcykKLSoKLSogWGJvb2xlYW4gWFVhcnRMaXRlX21Jc1JlY2VpdmVFbXB0eSh1MzIgQmFzZUFkZHJlc3MpCi0qIFhib29sZWFuIFhVYXJ0TGl0ZV9tSXNUcmFuc21pdEZ1bGwodTMyIEJhc2VBZGRyZXNzKQotKiBYYm9vbGVhbiBYVWFydExpdGVfbUlzSW50ckVuYWJsZWQodTMyIEJhc2VBZGRyZXNzKQotKgotKiB2b2lkIFhVYXJ0TGl0ZV9tRW5hYmxlSW50cih1MzIgQmFzZUFkZHJlc3MpCi0qIHZvaWQgWFVhcnRMaXRlX21EaXNhYmxlSW50cih1MzIgQmFzZUFkZHJlc3MpCi0qCi0qIHZvaWQgWFVhcnRMaXRlX1NlbmRCeXRlKHUzMiBCYXNlQWRkcmVzcywgdTggRGF0YSk7Ci0qIHU4IFhVYXJ0TGl0ZV9SZWN2Qnl0ZSh1MzIgQmFzZUFkZHJlc3MpOwotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qCi0qIFNldCB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuIFVzZSB0aGUgWFVMX0NSXyogY29uc3RhbnRzIGRlZmluZWQKLSogYWJvdmUgdG8gY3JlYXRlIHRoZSBiaXQtbWFzayB0byBiZSB3cml0dGVuIHRvIHRoZSByZWdpc3Rlci4KLSoKLSogQHBhcmFtICAgIEJhc2VBZGRyZXNzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZQotKiBAcGFyYW0gICAgTWFzayBpcyB0aGUgMzItYml0IHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVyCi0qCi0qIEByZXR1cm4gICBOb25lLgotKgotKiBAbm90ZQkgICAgTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYVWFydExpdGVfbVNldENvbnRyb2xSZWcoQmFzZUFkZHJlc3MsIE1hc2spIFwKLQkJICAgIFhJb19PdXQzMigoQmFzZUFkZHJlc3MpICsgWFVMX0NPTlRST0xfUkVHX09GRlNFVCwgKE1hc2spKQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qCi0qIEdldCB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuIFVzZSB0aGUgWFVMX0NSXyogY29uc3RhbnRzIGRlZmluZWQKLSogYWJvdmUgdG8gaW50ZXJwcmV0IHRoZSBiaXQtbWFzayByZXR1cm5lZC4KLSoKLSogQHBhcmFtICAgIEJhc2VBZGRyZXNzIGlzIHRoZQliYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZQotKgotKiBAcmV0dXJuICAgQSAzMi1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgY29udHJvbCByZWdpc3Rlci4KLSoKLSogQG5vdGUJICAgIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVhcnRMaXRlX21HZXRDb250cm9sUmVnKEJhc2VBZGRyZXNzKSBcCi0JCSAgICBYSW9fSW4zMigoQmFzZUFkZHJlc3MpICsgWFVMX0NPTlRST0xfUkVHX09GRlNFVCkKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKgotKiBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGF0dXMgcmVnaXN0ZXIuIFVzZSB0aGUgWFVMX1NSXyogY29uc3RhbnRzIGRlZmluZWQKLSogYWJvdmUgdG8gaW50ZXJwcmV0IHRoZSBiaXQtbWFzayByZXR1cm5lZC4KLSoKLSogQHBhcmFtICAgIEJhc2VBZGRyZXNzIGlzIHRoZQliYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZQotKgotKiBAcmV0dXJuICAgQSAzMi1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgc3RhdHVzIHJlZ2lzdGVyLgotKgotKiBAbm90ZQkgICAgTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYVWFydExpdGVfbUdldFN0YXR1c1JlZyhCYXNlQWRkcmVzcykgXAotCQkgICAgWElvX0luMzIoKEJhc2VBZGRyZXNzKSArIFhVTF9TVEFUVVNfUkVHX09GRlNFVCkKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotKgotKiBDaGVjayB0byBzZWUgaWYgdGhlIHJlY2VpdmVyIGhhcyBkYXRhLgotKgotKiBAcGFyYW0gICAgQmFzZUFkZHJlc3MgaXMgdGhlCWJhc2UgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCi0qCi0qIEByZXR1cm4gICBYVFJVRSBpZiB0aGUgcmVjZWl2ZXIgaXMgZW1wdHksIFhGQUxTRSBpZiB0aGVyZSBpcyBkYXRhIHByZXNlbnQuCi0qCi0qIEBub3RlCSAgICBOb25lLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFhVYXJ0TGl0ZV9tSXNSZWNlaXZlRW1wdHkoQmFzZUFkZHJlc3MpIFwKLQkgICghKFhVYXJ0TGl0ZV9tR2V0U3RhdHVzUmVnKChCYXNlQWRkcmVzcykpICYgWFVMX1NSX1JYX0ZJRk9fVkFMSURfREFUQSkpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFuc21pdHRlciBpcyBmdWxsLgotKgotKiBAcGFyYW0gICAgQmFzZUFkZHJlc3MgaXMgdGhlCWJhc2UgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCi0qCi0qIEByZXR1cm4gICBYVFJVRSBpZiB0aGUgdHJhbnNtaXR0ZXIgaXMgZnVsbCwgWEZBTFNFIG90aGVyd2lzZS4KLSoKLSogQG5vdGUJICAgIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVhcnRMaXRlX21Jc1RyYW5zbWl0RnVsbChCYXNlQWRkcmVzcykgXAotCQkoWFVhcnRMaXRlX21HZXRTdGF0dXNSZWcoKEJhc2VBZGRyZXNzKSkgJiBYVUxfU1JfVFhfRklGT19GVUxMKQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0qCi0qIENoZWNrIHRvIHNlZSBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZWQuCi0qCi0qIEBwYXJhbSAgICBCYXNlQWRkcmVzcyBpcyB0aGUJYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UKLSoKLSogQHJldHVybiAgIFhUUlVFIGlmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgWEZBTFNFIG90aGVyd2lzZS4KLSoKLSogQG5vdGUJICAgIE5vbmUuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgWFVhcnRMaXRlX21Jc0ludHJFbmFibGVkKEJhc2VBZGRyZXNzKSBcCi0JCShYVWFydExpdGVfbUdldFN0YXR1c1JlZygoQmFzZUFkZHJlc3MpKSAmIFhVTF9TUl9JTlRSX0VOQUJMRUQpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogRW5hYmxlIHRoZSBkZXZpY2UgaW50ZXJydXB0LiBQcmVzZXJ2ZSB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCi0qCi0qIEBwYXJhbSAgICBCYXNlQWRkcmVzcyBpcyB0aGUJYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UKLSoKLSogQHJldHVybiAgIE5vbmUuCi0qCi0qIEBub3RlCSAgICBOb25lLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFhVYXJ0TGl0ZV9tRW5hYmxlSW50cihCYXNlQWRkcmVzcykgXAotCSAgICAgICBYVWFydExpdGVfbVNldENvbnRyb2xSZWcoKEJhc2VBZGRyZXNzKSwgXAotCQkgICBYVWFydExpdGVfbUdldENvbnRyb2xSZWcoKEJhc2VBZGRyZXNzKSkgfCBYVUxfQ1JfRU5BQkxFX0lOVFIpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSoKLSogRGlzYWJsZSB0aGUgZGV2aWNlIGludGVycnVwdC4gUHJlc2VydmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyLgotKgotKiBAcGFyYW0gICAgQmFzZUFkZHJlc3MgaXMgdGhlCWJhc2UgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCi0qCi0qIEByZXR1cm4gICBOb25lLgotKgotKiBAbm90ZQkgICAgTm9uZS4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBYVWFydExpdGVfbURpc2FibGVJbnRyKEJhc2VBZGRyZXNzKSBcCi0JICAgICAgWFVhcnRMaXRlX21TZXRDb250cm9sUmVnKChCYXNlQWRkcmVzcyksIFwKLQkJICBYVWFydExpdGVfbUdldENvbnRyb2xSZWcoKEJhc2VBZGRyZXNzKSkgJiB+WFVMX0NSX0VOQUJMRV9JTlRSKQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBGdW5jdGlvbiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIFhVYXJ0TGl0ZV9TZW5kQnl0ZSh1MzIgQmFzZUFkZHJlc3MsIHU4IERhdGEpOwotdTggWFVhcnRMaXRlX1JlY3ZCeXRlKHUzMiBCYXNlQWRkcmVzcyk7Ci0KLQotI2VuZGlmCQkgIC8qIGVuZCBvZiBwcm90ZWN0aW9uIG1hY3JvICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2lvLmggYi9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2lvLmgKaW5kZXggYWEzN2E2MC4uODgwNDcyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9pby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvaW8uaApAQCAtMTYsNiArMTYsOCBAQAogI2lmbmRlZiBfX01JQ1JPQkxBWkVfSU9fSF9fCiAjZGVmaW5lIF9fTUlDUk9CTEFaRV9JT19IX18KIAorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4RkZGRkZGRkYKIAogI2RlZmluZSByZWFkYihhZGRyKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taWNyb2JsYXplL3NlcmlhbF94dWFydGxpdGUuaCBiL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvc2VyaWFsX3h1YXJ0bGl0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2QxZTgzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvc2VyaWFsX3h1YXJ0bGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNCBBdG1hcmsgVGVjaG5vLCBJbmMuCi0gKgotICogWWFzdXNoaSBTSE9KSSA8eWFzaGlAYXRtYXJrLXRlY2huby5jb20+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9hcmNoL3h1YXJ0bGl0ZV9sLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvZnNsX2xiYy5oIGIvaW5jbHVkZS9hc20tcHBjL2ZzbF9sYmMuaAppbmRleCBjNGFmNzk3Li5lYTQ5ZGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvZnNsX2xiYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9mc2xfbGJjLmgKQEAgLTI5OCw0ICsyOTgsMTMgQEAKICNkZWZpbmUgTENSUl9DTEtESVZfNAkJCTB4MDAwMDAwMDQKICNkZWZpbmUgTENSUl9DTEtESVZfOAkJCTB4MDAwMDAwMDgKIAorLyogTFRFRFIgLSBUcmFuc2ZlciBFcnJvciBDaGVjayBEaXNhYmxlIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTFRFRFJfQk1ECTB4ODAwMDAwMDAgLyogQnVzIG1vbml0b3IgZGlzYWJsZQkJCQkqLworI2RlZmluZSBMVEVEUl9QQVJECTB4MjAwMDAwMDAgLyogUGFyaXR5IGVycm9yIGNoZWNraW5nIGRpc2FibGVkCQkJKi8KKyNkZWZpbmUgTFRFRFJfV1BECTB4MDQwMDAwMDAgLyogV3JpdGUgcHJvdGVjdCBlcnJvciBjaGVja2luZyBkaWFibGUJCSovCisjZGVmaW5lIExURURSX1dBUkEJMHgwMDgwMDAwMCAvKiBXcml0ZS1hZnRlci1yZWFkLWF0b21pYyBlcnJvciBjaGVja2luZyBkaWFibGUJKi8KKyNkZWZpbmUgTFRFRFJfUkFXQQkweDAwNDAwMDAwIC8qIFJlYWQtYWZ0ZXItd3JpdGUtYXRvbWljIGVycm9yIGNoZWNraW5nIGRpc2FibGUJKi8KKyNkZWZpbmUgTFRFRFJfQ1NECTB4MDAwODAwMDAgLyogQ2hpcCBzZWxlY3QgZXJyb3IgY2hlY2tpbmcgZGlzYWJsZQkJKi8KKwogI2VuZGlmIC8qIF9fQVNNX1BQQ19GU0xfTEJDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84Nnh4LmggYi9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODZ4eC5oCmluZGV4IGMwM2I0YjguLjAzYTI1YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84Nnh4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2ltbWFwXzg2eHguaApAQCAtMTMwNCw5ICsxMzA0LDIxIEBACiAJdWludCAgICBseW54ZGNyMTsgICAgICAgIC8qIDB4ZTBmMDggLSBMeW54IGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgMSovCiAJaW50ICAgICByZXMxNFs2XTsKIAl1aW50ICAgIGRkcmlvb3ZjcjsgICAgICAvKiAweGUwZjI0IC0gRERSIElPIE92ZXJkcml2ZSBDb250cm9sIHJlZ2lzdGVyICovCi0JY2hhcglyZXMxNVs2MTY1Nl07CisJY2hhcglyZXMxNVsyMTZdOwogfSBjY3NyX2d1cl90OwogCisvKgorICogV2F0Y2hkb2cgcmVnaXN0ZXIgYmxvY2soMHhlXzQwMDAtMHhlXzRmZmYpCisgKi8KK3R5cGVkZWYgc3RydWN0IGNjc3Jfd2R0IHsKKwl1aW50CXJlczA7CisJdWludAlzd2NycjsgLyogU3lzdGVtIHdhdGNoZG9nIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwl1aW50CXN3Y25yOyAvKiBTeXN0ZW0gd2F0Y2hkb2cgY291bnQgcmVnaXN0ZXIgKi8KKwljaGFyCXJlczFbMl07CisJdXNob3J0CXN3c3JyOyAvKiBTeXN0ZW0gd2F0Y2hkb2cgc2VydmljZSByZWdpc3RlciAqLworCWNoYXIJcmVzMls0MDgwXTsKK30gY2Nzcl93ZHRfdDsKKwogdHlwZWRlZiBzdHJ1Y3QgaW1tYXAgewogCWNjc3JfbG9jYWxfbWNtX3QJaW1fbG9jYWxfbWNtOwogCWNjc3JfZGRyX3QJCWltX2RkcjE7CkBAIC0xMzMwLDYgKzEzNDIsOCBAQAogCWNoYXIgICAgICAgICAgICAgICAgICAgIHJlczVbMzg5MTIwXTsKIAljY3NyX3Jpb190CQlpbV9yaW87CiAJY2Nzcl9ndXJfdAkJaW1fZ3VyOworCWNoYXIJCQlyZXM2WzEyMjg4XTsKKwljY3NyX3dkdF90CQlpbV93ZHQ7CiB9IGltbWFwX3Q7CiAKIGV4dGVybiBpbW1hcF90ICAqaW1tcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcm9jZXNzb3IuaAppbmRleCAxMGZkNDc4Li5lNjE3ODY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3Byb2Nlc3Nvci5oCkBAIC00MjYsNiArNDI2LDcgQEAKIC8qIGU1MDAgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgU1BSTl9MMUNGRzAJMHgyMDMJLyogTDEgQ2FjaGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCiAjZGVmaW5lIFNQUk5fTDFDRkcxCTB4MjA0CS8qIEwxIENhY2hlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX0wyQ0ZHMAkweDIwNwkvKiBMMiBDYWNoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9MMUNTUjAJMHgzZjIJLyogTDEgRGF0YSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSAgIEwxQ1NSMF9DUEUJCTB4MDAwMTAwMDAJLyogRGF0YSBDYWNoZSBQYXJpdHkgRW5hYmxlICovCiAjZGVmaW5lICAgTDFDU1IwX0RDRkkJCTB4MDAwMDAwMDIJLyogRGF0YSBDYWNoZSBGbGFzaCBJbnZhbGlkYXRlICovCkBAIC00MzQsNiArNDM1LDIxIEBACiAjZGVmaW5lICAgTDFDU1IxX0NQRQkJMHgwMDAxMDAwMAkvKiBJbnN0cnVjdGlvbiBDYWNoZSBQYXJpdHkgRW5hYmxlICovCiAjZGVmaW5lICAgTDFDU1IxX0lDRkkJCTB4MDAwMDAwMDIJLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgRmxhc2ggSW52YWxpZGF0ZSAqLwogI2RlZmluZSAgIEwxQ1NSMV9JQ0UJCTB4MDAwMDAwMDEJLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgRW5hYmxlICovCisjZGVmaW5lIFNQUk5fTDFDU1IyCTB4MjVlCS8qIEwxIERhdGEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgU1BSTl9MMkNTUjAJMHgzZjkJLyogTDIgRGF0YSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMCAqLworI2RlZmluZSAgIEwyQ1NSMF9MMkUJCTB4ODAwMDAwMDAJLyogTDIgQ2FjaGUgRW5hYmxlICovCisjZGVmaW5lICAgTDJDU1IwX0wyUEUJCTB4NDAwMDAwMDAJLyogTDIgQ2FjaGUgUGFyaXR5L0VDQyBFbmFibGUgKi8KKyNkZWZpbmUgICBMMkNTUjBfTDJXUAkJMHgxYzAwMDAwMAkvKiBMMiBJL0QgV2F5IFBhcnRpb25pbmcgKi8KKyNkZWZpbmUgICBMMkNTUjBfTDJDTQkJMHgwMzAwMDAwMAkvKiBMMiBDYWNoZSBDb2hlcmVuY3kgTW9kZSAqLworI2RlZmluZSAgIEwyQ1NSMF9MMkZJCQkweDAwMjAwMDAwCS8qIEwyIENhY2hlIEZsYXNoIEludmFsaWRhdGUgKi8KKyNkZWZpbmUgICBMMkNTUjBfTDJJTwkJMHgwMDEwMDAwMAkvKiBMMiBDYWNoZSBJbnN0cnVjdGlvbiBPbmx5ICovCisjZGVmaW5lICAgTDJDU1IwX0wyRE8JCTB4MDAwMTAwMDAJLyogTDIgQ2FjaGUgRGF0YSBPbmx5ICovCisjZGVmaW5lICAgTDJDU1IwX0wyUkVQCQkweDAwMDAzMDAwCS8qIEwyIExpbmUgUmVwbGFjZW1lbnQgQWxnbyAqLworI2RlZmluZSAgIEwyQ1NSMF9MMkZMCQkweDAwMDAwODAwCS8qIEwyIENhY2hlIEZsdXNoICovCisjZGVmaW5lICAgTDJDU1IwX0wyTEZDCQkweDAwMDAwNDAwCS8qIEwyIENhY2hlIExvY2sgRmxhc2ggQ2xlYXIgKi8KKyNkZWZpbmUgICBMMkNTUjBfTDJMT0EJCTB4MDAwMDAwODAJLyogTDIgQ2FjaGUgTG9jayBPdmVyZmxvdyBBbGxvY2F0ZSAqLworI2RlZmluZSAgIEwyQ1NSMF9MMkxPCQkweDAwMDAwMDIwCS8qIEwyIENhY2hlIExvY2sgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgU1BSTl9MMkNTUjEJMHgzZmEJLyogTDIgRGF0YSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMSAqLwogCiAjZGVmaW5lIFNQUk5fTU1VQ1NSMAkweDNmNAkvKiBNTVUgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9NQVMwCTB4MjcwCS8qIE1NVSBBc3Npc3QgUmVnaXN0ZXIgMCAqLwpAQCAtNjI0LDggKzY0MCwxMiBAQAogI2RlZmluZSBNQ1NSUjEJU1BSTl9NQ1NSUjEKICNkZWZpbmUgTDFDU1IwCVNQUk5fTDFDU1IwCiAjZGVmaW5lIEwxQ1NSMQlTUFJOX0wxQ1NSMQorI2RlZmluZSBMMUNTUjIJU1BSTl9MMUNTUjIKICNkZWZpbmUgTDFDRkcwCVNQUk5fTDFDRkcwCiAjZGVmaW5lIEwxQ0ZHMQlTUFJOX0wxQ0ZHMQorI2RlZmluZSBMMkNGRzAJU1BSTl9MMkNGRzAKKyNkZWZpbmUgTDJDU1IwCVNQUk5fTDJDU1IwCisjZGVmaW5lIEwyQ1NSMQlTUFJOX0wyQ1NSMQogI2RlZmluZSBNQ1NSCVNQUk5fTUNTUgogI2RlZmluZSBNTVVDU1IwCVNQUk5fTU1VQ1NSMAogI2RlZmluZSBCVUNTUglTUFJOX0JVQ1NSCkBAIC04ODUsNiArOTA1LDE1IEBACiAvKiBTb21lIHBhcnRzIGRlZmluZSBTVlJbMDoyM10gYXMgdGhlIFNPQyB2ZXJzaW9uICovCiAjZGVmaW5lIFNWUl9TT0NfVkVSKHN2cikgKCgoc3ZyKSA+PiA4KSAmIDB4RkZGRkZGKQkvKiBTT0MgVmVyc2lvbiBmaWVsZHMgKi8KIAorLyogd2hldGhlciBNUEM4eHh4RSAoaS5lLiBoYXMgU0VDKSAqLworI2lmIGRlZmluZWQoQ09ORklHX01QQzg1eHgpCisjZGVmaW5lIElTX0VfUFJPQ0VTU09SKHN2cikJKHN2ciAmIDB4ODAwMDApCisjZWxzZQorI2lmIGRlZmluZWQoQ09ORklHX01QQzgzWFgpCisjZGVmaW5lIElTX0VfUFJPQ0VTU09SKHNwcmlkcikJKCEoc3ByaWRyICYgMHgwMDAxMDAwMCkpCisjZW5kaWYKKyNlbmRpZgorCiAvKgogICogU1ZSX1NPQ19WRVIoKSBWZXJzaW9uIFZhbHVlcwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRUIrTUNGLUVWMTIzLmggYi9pbmNsdWRlL2NvbmZpZ3MvRUIrTUNGLUVWMTIzLmgKaW5kZXggNDE3MDk5ZS4uMzI0ZWI2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0VCK01DRi1FVjEyMy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9FQitNQ0YtRVYxMjMuaApAQCAtODQsNiArODQsOCBAQAogI2RlZmluZSBDT05GSUdfQ01EX01JSQogI2RlZmluZSBDT05GSUdfQ01EX05FVAogCisjZGVmaW5lIENPTkZJR19NQ0ZUTVIKKwogI2RlZmluZSBDT05GSUdfTUNGRkVDCiAjaWZkZWYgQ09ORklHX01DRkZFQwogIwlkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL001NDc1RVZCLmggYi9pbmNsdWRlL2NvbmZpZ3MvTTU0NzVFVkIuaAppbmRleCBhMTljMzQyLi5lODgwNGI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTTU0NzVFVkIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTTU0NzVFVkIuaApAQCAtMzAzLDkgKzMwMyw5IEBACiAjZGVmaW5lIENGR19DUzBfQ1RSTAkJMHgwMDEwMTk4MAogCiAjaWZkZWYgQ0ZHX05PUjFTWgotI2RlZmluZSBDRkdfQ1MxX0JBU0UJCTB4RjgwMDAwMDAKKyNkZWZpbmUgQ0ZHX0NTMV9CQVNFCQkweEUwMDAwMDAwCiAjZGVmaW5lIENGR19DUzFfTUFTSwkJKCgoQ0ZHX05PUjFTWiA8PCAyMCkgLSAxKSAmIDB4RkZGRjAwMDEpCi0jZGVmaW5lIENGR19DUzFfQ1RSTAkJMHgwMDAwMEQ4MAorI2RlZmluZSBDRkdfQ1MxX0NUUkwJCTB4MDAxMDFEODAKICNlbmRpZgogCiAjZW5kaWYJCQkJLyogX001NDc1RVZCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NNTQ4NUVWQi5oIGIvaW5jbHVkZS9jb25maWdzL001NDg1RVZCLmgKaW5kZXggYjczZTJlMC4uMGY5NTdmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL001NDg1RVZCLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL001NDg1RVZCLmgKQEAgLTI4OSw5ICsyODksOSBAQAogI2RlZmluZSBDRkdfQ1MwX0NUUkwJCTB4MDAxMDE5ODAKIAogI2lmZGVmIENGR19OT1IxU1oKLSNkZWZpbmUgQ0ZHX0NTMV9CQVNFCQkweEY4MDAwMDAwCisjZGVmaW5lIENGR19DUzFfQkFTRQkJMHhFMDAwMDAwMAogI2RlZmluZSBDRkdfQ1MxX01BU0sJCSgoKENGR19OT1IxU1ogPDwgMjApIC0gMSkgJiAweEZGRkYwMDAxKQotI2RlZmluZSBDRkdfQ1MxX0NUUkwJCTB4MDAwMDBEODAKKyNkZWZpbmUgQ0ZHX0NTMV9DVFJMCQkweDAwMTAxRDgwCiAjZW5kaWYKIAogI2VuZGlmCQkJCS8qIF9NNTQ4NUVWQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0NERTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0NERTLmgKaW5kZXggNjY5ZjRkN2MuLjA5MWZkMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ0RFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0NERTLmgKQEAgLTE0OCw4ICsxNDgsNiBAQAogICovCiAjZGVmaW5lIENGR19CT09UX0JMT0NLCQkweGZjMDAwMDAwCS8qIGJvb3QgVExCICovCiAKLSNkZWZpbmUgQ0ZHX0xCQ19DQUNIRV9CQVNFCTB4ZjAwMDAwMDAJLyogTG9jYWxidXMgY2FjaGVhYmxlICovCi0KICNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4ZmY4MDAwMDAJLyogc3RhcnQgb2YgRkxBU0ggOE0gKi8KIAogI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkJMHhmZjgwMTAwMQpAQCAtMTU4LDEwICsxNTYsMTAgQEAKICNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0JCTB4ZmY4MDZlNjUKICNkZWZpbmUgQ0ZHX09SMV9QUkVMSU0JCTB4ZmY4MDZlNjUKIAotI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7MHhmZTgwMDAwMCxDRkdfRkxBU0hfQkFTRX0KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJe0NGR19GTEFTSF9CQVNFfQogCiAjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMgkJLyogbnVtYmVyIG9mIGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkJLyogbnVtYmVyIG9mIGJhbmtzICovCiAjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkxMjgJCS8qIHNlY3RvcnMgcGVyIGRldmljZSAqLwogI3VuZGVmCUNGR19GTEFTSF9DSEVDS1NVTQogI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAk2MDAwMAkJLyogRmxhc2ggRXJhc2UgVGltZW91dCAobXMpICovCkBAIC0yMDMsMzAgKzIwMSwxOCBAQAogCiAKIC8qIGRlZmluZSB0byB1c2UgTDEgYXMgaW5pdGlhbCBzdGFjayAqLwotI2RlZmluZSBDT05GSUdfTDFfSU5JVF9SQU0JMQotI2RlZmluZSBDRkdfSU5JVF9MMV9MT0NLCTEKLSNkZWZpbmUgQ0ZHX0lOSVRfTDFfQUREUgkweGY0MDEwMDAwCS8qIEluaXRpYWwgTDEgYWRkcmVzcyAqLwotI2RlZmluZSBDRkdfSU5JVF9MMV9FTkQJCTB4MDAwMDQwMDAJLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBSQU0gKi8KKyNkZWZpbmUgQ09ORklHX0wxX0lOSVRfUkFNCisjZGVmaW5lIENGR19JTklUX1JBTV9MT0NLICAgICAgMQorI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUiAgICAgIDB4ZjQwMTAwMDAgICAgICAvKiBJbml0aWFsIEwxIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORCAgICAgICAweDAwMDA0MDAwICAgICAgLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBSQU0gKi8KIAotLyogZGVmaW5lIHRvIHVzZSBMMlNSQU0gYXMgaW5pdGlhbCBzdGFjayAqLwotI3VuZGVmIENPTkZJR19MMl9JTklUX1JBTQotI2RlZmluZSBDRkdfSU5JVF9MMl9BRERSCTB4ZjhmYzAwMDAKLSNkZWZpbmUgQ0ZHX0lOSVRfTDJfRU5ECQkweDAwMDQwMDAwCS8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gUkFNICovCi0KLSNpZmRlZiBDT05GSUdfTDFfSU5JVF9SQU0KLSNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJQ0ZHX0lOSVRfTDFfQUREUgotI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECUNGR19JTklUX0wxX0VORAotI2Vsc2UKLSNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJQ0ZHX0lOSVRfTDJfQUREUgotI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECUNGR19JTklUX0wyX0VORAotI2VuZGlmCiAKICNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIG51bSBieXRlcyBpbml0aWFsIGRhdGEgKi8KICNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQogI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVAogCiAjZGVmaW5lIENGR19NT05JVE9SX0xFTgkJKDI1NiAqIDEwMjQpIC8qIFJlc2VydmUgMjU2IGtCIGZvciBNb24gKi8KLSNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCSgxMjggKiAxMDI0KQkvKiBSZXNlcnZlZCBmb3IgbWFsbG9jICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMTAyNCAqIDEwMjQpCS8qIFJlc2VydmVkIGZvciBtYWxsb2MgKi8KIAogLyogU2VyaWFsIFBvcnQgLSBjb250cm9sbGVkIG9uIGJvYXJkIHdpdGgganVtcGVyIEo4CiAgKiBvcGVuIC0gaW5kZXggMgpAQCAtMzE0LDYgKzMwMCwyNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogCisvKlBDSUUgdmlkZW8gY2FyZCB1c2VkKi8KKyNkZWZpbmUgVklERU9fSU9fT0ZGU0VUCQlDRkdfUENJRTJfSU9fUEhZUworCisvKlBDSSB2aWRlbyBjYXJkIHVzZWQqLworLyojZGVmaW5lIFZJREVPX0lPX09GRlNFVAlDRkdfUENJMV9JT19QSFlTKi8KKworLyogdmlkZW8gKi8KKyNkZWZpbmUgQ09ORklHX1ZJREVPCisKKyNpZiBkZWZpbmVkKENPTkZJR19WSURFTykKKyNkZWZpbmUgQ09ORklHX0JJT1NFTVUKKyNkZWZpbmUgQ09ORklHX0NGQl9DT05TT0xFCisjZGVmaW5lIENPTkZJR19WSURFT19TV19DVVJTT1IKKyNkZWZpbmUgQ09ORklHX1ZHQV9BU19TSU5HTEVfREVWSUNFCisjZGVmaW5lIENPTkZJR19BVElfUkFERU9OX0ZCCisjZGVmaW5lIENPTkZJR19WSURFT19MT0dPCisvKiNkZWZpbmUgQ09ORklHX0NPTlNPTEVfQ1VSU09SKi8KKyNkZWZpbmUgQ0ZHX0lTQV9JT19CQVNFX0FERFJFU1MgVklERU9fSU9fT0ZGU0VUCisjZW5kaWYKKwogI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCiAjZGVmaW5lIENPTkZJR19QQ0lfUE5QCQkJLyogZG8gcGNpIHBsdWctYW5kLXBsYXkgKi8KIApAQCAtMzgyLDcgKzM4OCw3IEBACiAjaWYgQ0ZHX01PTklUT1JfQkFTRSA+IDB4ZmZmODAwMDAKICNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkweGZmZjgwMDAwCiAjZWxzZQotI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFICsgMHg0MDAwMCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX01PTklUT1JfQkFTRSArIDB4NzAwMDApCiAjZW5kaWYKICNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAKICNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHgxMDAwMCAvKiA2NEsgKG9uZSBzZWN0b3IpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2MEFEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NjBBRFMuaAppbmRleCBlZGY4NTI1Li4yNzIxMjE2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg1NjBBRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2MEFEUy5oCkBAIC01MzgsMjkgKzUzOCwyOSBAQAogI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJMTE1MjAwCiAKICNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQkgICAgICAgIFwKLSAgICJuZXRkZXY9ZXRoMFwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICJjb25zb2xlZGV2PXR0eUNQTVwwIgkJCQkJCVwKLSAgICJyYW1kaXNrYWRkcj0xMDAwMDAwXDAiCQkJCQkJXAotICAgInJhbWRpc2tmaWxlPXlvdXIucmFtZGlzay51LWJvb3RcMCIJCQkJCVwKLSAgICJmZHRhZGRyPTQwMDAwMFwwIgkJCQkJCQlcCi0gICAiZmR0ZmlsZT1tcGM4NTYwYWRzLmR0YlwwIgorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQlcCisJImNvbnNvbGVkZXY9dHR5Q1BNXDAiCQkJCQkJXAorCSJyYW1kaXNrYWRkcj0xMDAwMDAwXDAiCQkJCQkJXAorCSJyYW1kaXNrZmlsZT15b3VyLnJhbWRpc2sudS1ib290XDAiCQkJCVwKKwkiZmR0YWRkcj00MDAwMDBcMCIJCQkJCQlcCisJImZkdGZpbGU9bXBjODU2MGFkcy5kdGJcMCIKIAogI2RlZmluZSBDT05GSUdfTkZTQk9PVENPTU1BTkQJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICJzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICJuZnNyb290PSRzZXJ2ZXJpcDokcm9vdHBhdGggIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICJpcD0kaXBhZGRyOiRzZXJ2ZXJpcDokZ2F0ZXdheWlwOiRuZXRtYXNrOiRob3N0bmFtZTokbmV0ZGV2Om9mZiAiIFwKLSAgICAgICJjb25zb2xlPSRjb25zb2xlZGV2LCRiYXVkcmF0ZSAkb3RoYm9vdGFyZ3M7IiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICJ0ZnRwICRmZHRhZGRyICRmZHRmaWxlOyIJCQkJCQlcCi0gICAiYm9vdG0gJGxvYWRhZGRyIC0gJGZkdGFkZHIiCisJInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIJCQkJXAorCQkibmZzcm9vdD0kc2VydmVyaXA6JHJvb3RwYXRoICIJCQkJXAorCQkiaXA9JGlwYWRkcjokc2VydmVyaXA6JGdhdGV3YXlpcDokbmV0bWFzazokaG9zdG5hbWU6JG5ldGRldjpvZmYgIiBcCisJCSJjb25zb2xlPSRjb25zb2xlZGV2LCRiYXVkcmF0ZSAkb3RoYm9vdGFyZ3M7IgkJXAorCSJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IgkJCQkJXAorCSJ0ZnRwICRmZHRhZGRyICRmZHRmaWxlOyIJCQkJCVwKKwkiYm9vdG0gJGxvYWRhZGRyIC0gJGZkdGFkZHIiCiAKICNkZWZpbmUgQ09ORklHX1JBTUJPT1RDT01NQU5EIFwKLSAgICJzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSBydyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICJjb25zb2xlPSRjb25zb2xlZGV2LCRiYXVkcmF0ZSAkb3RoYm9vdGFyZ3M7IiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICJ0ZnRwICRyYW1kaXNrYWRkciAkcmFtZGlza2ZpbGU7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICJ0ZnRwICRmZHRhZGRyICRmZHRmaWxlOyIJCQkJCQlcCi0gICAiYm9vdG0gJGxvYWRhZGRyICRyYW1kaXNrYWRkciAkZmR0YWRkciIKKwkic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcncgIgkJCQlcCisJCSJjb25zb2xlPSRjb25zb2xlZGV2LCRiYXVkcmF0ZSAkb3RoYm9vdGFyZ3M7IgkJXAorCSJ0ZnRwICRyYW1kaXNrYWRkciAkcmFtZGlza2ZpbGU7IgkJCQlcCisJInRmdHAgJGxvYWRhZGRyICRib290ZmlsZTsiCQkJCQlcCisJInRmdHAgJGZkdGFkZHIgJGZkdGZpbGU7IgkJCQkJXAorCSJib290bSAkbG9hZGFkZHIgJHJhbWRpc2thZGRyICRmZHRhZGRyIgogCiAjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORCAgQ09ORklHX05GU0JPT1RDT01NQU5ECiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NjEwSFBDRC5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg2MTBIUENELmgKaW5kZXggZmMxNjg5MC4uMDY4OTliMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg2MTBIUENELmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg2MTBIUENELmgKQEAgLTE0MCwxMSArMTQwLDExIEBACiAjZW5kaWYKICNlbmRpZgogCi0jZGVmaW5lIENGR19JRF9FRVBST00KLSNpZmRlZiBDRkdfSURfRUVQUk9NCiAjZGVmaW5lIENPTkZJR19JRF9FRVBST00KLSNlbmRpZgotI2RlZmluZSBJRF9FRVBST01fQUREUgkJMHg1NworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9OWElECisjZGVmaW5lIENGR19JRF9FRVBST00KKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgMHg1NworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAxCiAKIAogI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHhmMDAwMDAwMCAvKiBzdGFydCBvZiBGTEFTSCAxMjhNICovCkBAIC00ODUsNyArNDg1LDggQEAKICNlbmRpZgogCiAKLSN1bmRlZiBDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBkaXNhYmxlZCAqLworI2RlZmluZSBDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBlbmFibGVkICovCisjZGVmaW5lIENGR19XQVRDSERPR19GUkVRCTUwMDAJLyogRmVlZCBpbnRlcnZhbCwgNXMgKi8KIAogLypESVUgQ29uZmlndXJhdGlvbiovCiAjZGVmaW5lIERJVV9DT05ORUNUX1RPX0RWSQkJLyogRElVIGNvbnRyb2xsZXIgY29ubmVjdHMgdG8gRFZJIGVuY29kZXIqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg2NDFIUENOLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaAppbmRleCA0NTVlMTU0Li5jZDM1NDk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaApAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAjZGVmaW5lIENGR19ERFJfQ1M1X0JORFMJMHgwMDAwMEZGRgkvKiBOb3QgZG9uZSAqLwogI2VuZGlmCiAKLSNkZWZpbmUgQ0ZHX0lEX0VFUFJPTQkxCi0jaWZkZWYgQ0ZHX0lEX0VFUFJPTQogI2RlZmluZSBDT05GSUdfSURfRUVQUk9NCi0jZW5kaWYKLSNkZWZpbmUgSURfRUVQUk9NX0FERFIgMHg1NworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9OWElECisjZGVmaW5lIENGR19JRF9FRVBST00KKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgMHg1NworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAxCiAKIC8qCiAgKiBJbiBNUEM4NjQxSFBDTiwgYWxsb2NhdGUgMTZNQiBmbGFzaCBzcGFjZXMgYXQgZmUwMDAwMDAgYW5kIGZmMDAwMDAwLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01WQkNfUC5oIGIvaW5jbHVkZS9jb25maWdzL01WQkNfUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTgwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVZCQ19QLmgKQEAgLTAsMCArMSwzMTYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQtMjAwOAorICogTWF0cml4LVZpc2lvbiBHbWJILCBhbmRyZS5zY2h3YXJ6QG1hdHJpeC12aXNpb24uZGUKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisjaW5jbHVkZSA8dmVyc2lvbi5oPgorCisjZGVmaW5lIENPTkZJR19NUEM1eHh4CTEKKyNkZWZpbmUgQ09ORklHX01QQzUyMDAgCTEKKworI2RlZmluZSBDRkdfTVBDNVhYWF9DTEtJTgkzMzAwMDAwMAorCisjZGVmaW5lIEJPT1RGTEFHX0NPTEQJCTB4MDEKKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkJMHgwMgorCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgkxCisKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfUFNDX0NPTlNPTEUJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCwgMjMwNDAwfQorCisjZGVmaW5lIENPTkZJR19QQ0kJCTEKKyNkZWZpbmUgQ09ORklHX1BDSV9QTlAJCTEKKyN1bmRlZglDT05GSUdfUENJX1NDQU5fU0hPVworI2RlZmluZSBDT05GSUdfUENJQVVUT19TS0lQX0hPU1RfQlJJREdFCTEKKworI2RlZmluZSBDT05GSUdfUENJX01FTV9CVVMJMHg0MDAwMDAwMAorI2RlZmluZSBDT05GSUdfUENJX01FTV9QSFlTCUNPTkZJR19QQ0lfTUVNX0JVUworI2RlZmluZSBDT05GSUdfUENJX01FTV9TSVpFCTB4MTAwMDAwMDAKKworI2RlZmluZSBDT05GSUdfUENJX0lPX0JVUwkweDUwMDAwMDAwCisjZGVmaW5lIENPTkZJR19QQ0lfSU9fUEhZUwlDT05GSUdfUENJX0lPX0JVUworI2RlZmluZSBDT05GSUdfUENJX0lPX1NJWkUJMHgwMTAwMDAwMAorCisjZGVmaW5lIENGR19YTEJfUElQRUxJTklORwkxCisjZGVmaW5lIENPTkZJR19ISUdIX0JBVFMJMQorCisjZGVmaW5lIE1WX0NJCQkJbXZCbHVlQ09VR0FSLVAKKyNkZWZpbmUgTVZfVkNJCQkJbXZCbHVlQ09VR0FSLVAKKyNkZWZpbmUgTVZfRlBHQV9EQVRBCQkweGZmODYwMDAwCisjZGVmaW5lIE1WX0ZQR0FfU0laRQkJMHgwMDAzYzg4NgorI2RlZmluZSBNVl9LRVJORUxfQUREUgkJMHhmZmMwMDAwMAorI2RlZmluZSBNVl9JTklUUkRfQUREUgkJMHhmZjkwMDAwMAorI2RlZmluZSBNVl9JTklUUkRfTEVOR1RICTB4MDAzMDAwMDAKKyNkZWZpbmUgTVZfU0NSQVRDSF9BRERSCQkweDAwMDAwMDAwCisjZGVmaW5lIE1WX1NDUkFUQ0hfTEVOR1RICU1WX0lOSVRSRF9MRU5HVEgKKyNkZWZpbmUgTVZfQVVUT1NDUl9BRERSCQkweGZmODQwMDAwCisjZGVmaW5lIE1WX0FVVE9TQ1JfQUREUjIJMHhmZjg1MDAwMAorI2RlZmluZSBNVl9EVEJfQUREUgkJMHhmZmZjMDAwMAorCisjZGVmaW5lIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MgMQorCisjZGVmaW5lIE1WX0tFUk5FTF9BRERSX1JBTQkweDAwMTAwMDAwCisjZGVmaW5lIE1WX0RUQl9BRERSX1JBTQkJMHgwMDYwMDAwMAorI2RlZmluZSBNVl9JTklUUkRfQUREUl9SQU0JMHgwMTAwMDAwMAorCisvKiBwYXNzIG9wZW4gZmlybXdhcmUgZmxhdCB0cmVlICovCisjZGVmaW5lIENPTkZJR19PRl9MSUJGRFQJMQorI2RlZmluZSBDT05GSUdfT0ZfQk9BUkRfU0VUVVAJMQorCisjZGVmaW5lIE9GX0NQVQkJCSJQb3dlclBDLDUyMDBAMCIKKyNkZWZpbmUgT0ZfU09DCQkJInNvYzUyMDBAZjAwMDAwMDAiCisjZGVmaW5lIE9GX1RCQ0xLCQkoYmQtPmJpX2J1c2ZyZXEgLyA0KQorI2RlZmluZSBNVl9EVEJfTkFNRQkJbXZiYy1wLmR0YgorI2RlZmluZSBDT05GSUdfT0ZfU1RET1VUX1ZJQV9BTElBUwkxCisKKy8qCisgKiBTdXBwb3J0ZWQgY29tbWFuZHMKKyAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisjZGVmaW5lIENPTkZJR19DTURfQ0FDSEUKKyNkZWZpbmUgQ09ORklHX0NNRF9ORVQKKyNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCisjZGVmaW5lIENPTkZJR19DTURfREhDUAorI2RlZmluZSBDT05GSUdfQ01EX1NEUkFNCisjZGVmaW5lIENPTkZJR19DTURfUENJCisjZGVmaW5lIENPTkZJR19DTURfRlBHQQorCisjdW5kZWYgQ09ORklHX1dBVENIRE9HCisKKyNkZWZpbmUgQ09ORklHX0JPT1RQX1ZFTkRPUkVYCisjZGVmaW5lIENPTkZJR19CT09UUF9TVUJORVRNQVNLCisjZGVmaW5lIENPTkZJR19CT09UUF9HQVRFV0FZCisjZGVmaW5lIENPTkZJR19CT09UUF9ETlMKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0ROUzIKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCisjZGVmaW5lIENPTkZJR19CT09UUF9CT09URklMRVNJWkUKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICisjZGVmaW5lIENPTkZJR19CT09UUF9OVFBTRVJWRVIKKyNkZWZpbmUgQ09ORklHX0JPT1RQX1JBTkRPTV9ERUxBWQorI2RlZmluZSBDT05GSUdfQk9PVFBfU0VORF9IT1NUTkFNRQorCisvKgorICogQXV0b2Jvb3QKKyAqLworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkyCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9LRVlFRAorI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfU1RPUF9TVFIgCSJzIgorI2RlZmluZSBDT05GSUdfWkVST19CT09UREVMQVlfQ0hFQ0sKKyNkZWZpbmUgQ09ORklHX1JFU0VUX1RPX1JFVFJZCQkxMDAwCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJpZiBpbWkgJHthdXRvc2NyX2FkZHJ9OyBcCisJCQkJCXRoZW4gYXV0b3NjciAke2F1dG9zY3JfYWRkcn07CVwKKwkJCQkJZWxzZSBhdXRvc2NyICR7YXV0b3Njcl9hZGRyMn07CVwKKwkJCQlmaTsiCisKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkicm9vdD0vZGV2L3JhbSBybyByb290ZnN0eXBlPXNxdWFzaGZzIgorI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorCisjZGVmaW5lIFhNS19TVFIoeCkgICAgICAjeAorI2RlZmluZSBNS19TVFIoeCkgICAgICAgWE1LX1NUUih4KQorCisjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJXAorCSJjb25zb2xlX25yPTBcMCIJCQkJCVwKKwkiY29uc29sZT15ZXNcMCIJCQkJCQlcCisJInN0ZGluPXNlcmlhbFwwIgkJCQkJXAorCSJzdGRvdXQ9c2VyaWFsXDAiCQkJCQlcCisJInN0ZGVycj1zZXJpYWxcMCIJCQkJCVwKKwkiZnBnYT0wXDAiCQkJCQkJXAorCSJmcGdhZGF0YT0iIE1LX1NUUihNVl9GUEdBX0RBVEEpICJcMCIJCQlcCisJImZwZ2FkYXRhc2l6ZT0iIE1LX1NUUihNVl9GUEdBX1NJWkUpICJcMCIJCVwKKwkiYXV0b3Njcl9hZGRyPSIgTUtfU1RSKE1WX0FVVE9TQ1JfQUREUikgIlwwIgkJXAorCSJhdXRvc2NyX2FkZHIyPSIgTUtfU1RSKE1WX0FVVE9TQ1JfQUREUjIpICJcMCIJCVwKKwkibXZfa2VybmVsX2FkZHI9IiBNS19TVFIoTVZfS0VSTkVMX0FERFIpICJcMCIJCVwKKwkibXZfa2VybmVsX2FkZHJfcmFtPSIgTUtfU1RSKE1WX0tFUk5FTF9BRERSX1JBTSkgIlwwIglcCisJIm12X2luaXRyZF9hZGRyPSIgTUtfU1RSKE1WX0lOSVRSRF9BRERSKSAiXDAiCQlcCisJIm12X2luaXRyZF9hZGRyX3JhbT0iIE1LX1NUUihNVl9JTklUUkRfQUREUl9SQU0pICJcMCIJXAorCSJtdl9pbml0cmRfbGVuZ3RoPSIgTUtfU1RSKE1WX0lOSVRSRF9MRU5HVEgpICJcMCIJXAorCSJtdl9kdGJfYWRkcj0iIE1LX1NUUihNVl9EVEJfQUREUikgIlwwIgkJCVwKKwkibXZfZHRiX2FkZHJfcmFtPSIgTUtfU1RSKE1WX0RUQl9BRERSX1JBTSkgIlwwIgkJXAorCSJkdGJfbmFtZT0iIE1LX1NUUihNVl9EVEJfTkFNRSkgIlwwIgkJCVwKKwkibXZfc2NyYXRjaF9hZGRyPSIgTUtfU1RSKE1WX1NDUkFUQ0hfQUREUikgIlwwIgkJXAorCSJtdl9zY3JhdGNoX2xlbmd0aD0iIE1LX1NUUihNVl9TQ1JBVENIX0xFTkdUSCkgIlwwIglcCisJIm12X3ZlcnNpb249IiBVX0JPT1RfVkVSU0lPTiAiXDAiCQkJXAorCSJkaGNwX2NsaWVudF9pZD0iIE1LX1NUUihNVl9DSSkgIlwwIgkJCVwKKwkiZGhjcF92ZW5kb3ItY2xhc3MtaWRlbnRpZmllcj0iIE1LX1NUUihNVl9WQ0kpICJcMCIJXAorCSJuZXRyZXRyeT1ub1wwIgkJCQkJCVwKKwkidXNlX3N0YXRpY19pcGFkZHI9bm9cMCIJCQkJXAorCSJzdGF0aWNfaXBhZGRyPTE5Mi4xNjguOTAuMTBcMCIJCQkJXAorCSJzdGF0aWNfbmV0bWFzaz0yNTUuMjU1LjI1NS4wXDAiCQkJXAorCSJzdGF0aWNfZ2F0ZXdheT0wLjAuMC4wXDAiCQkJCVwKKwkiaW5pdHJkX25hbWU9dUluaXRyZC5tdmJjLXAtcmZzXDAiCQkJXAorCSJ6Y2lwPW5vXDAiCQkJCQkJXAorCSJuZXRib290PXllc1wwIgkJCQkJCVwKKwkibXZ0ZXN0PUZmXDAiCQkJCQkJXAorCSJ0cmllZF9ib290ZnJvbWZsYXNoPW5vXDAiCQkJCVwKKwkidHJpZWRfYm9vdGZyb21uZXQ9bm9cMCIJCQkJXAorCSJ1c2VfZGhjcD15ZXNcMCIJCQkJCVwKKwkiZ2V2X3N0YXJ0PXllc1wwIgkJCQkJXAorCSJtdmJjZG1hX2RlYnVnPTBcMCIJCQkJCVwKKwkibXZiY2lhX2RlYnVnPTBcMCIJCQkJCVwKKwkicHJvcGRldl9kZWJ1Zz0wXDAiCQkJCQlcCisJImdldnNzX2RlYnVnPTBcMCIJCQkJCVwKKwkid2F0Y2hkb2c9MVwwIgkJCQkJCVwKKwkiIgorCisjdW5kZWYgWE1LX1NUUgorI3VuZGVmIE1LX1NUUgorCisvKgorICogSVBCIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uLgorICovCisjZGVmaW5lIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSworI2RlZmluZSBDRkdfUENJQ0xLX0VRVUFMU19JUEJDTEtfRElWMgorCisvKgorICogRmxhc2ggY29uZmlndXJhdGlvbgorICovCisjdW5kZWYgCUNPTkZJR19GTEFTSF8xNkJJVAorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCisjZGVmaW5lIENGR19GTEFTSF9DRklfQU1EX1JFU0VUIDEKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAk1MDAwMAorI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkxMDAwCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYKKworI2RlZmluZSBDRkdfTE9XQk9PVAorI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJVEVYVF9CQVNFCisjZGVmaW5lIENGR19GTEFTSF9TSVpFCQkweDAwODAwMDAwCisKKy8qCisgKiBFbnZpcm9ubWVudCBzZXR0aW5ncworICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gKKyN1bmRlZglDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIENGR19FTlZfQUREUgkJMHhGRkZFMDAwMAorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MTAwMDAKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHgxMDAwMAorI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIrQ0ZHX0VOVl9TSVpFKQorI2RlZmluZSBDRkdfRU5WX1NJWkVfUkVEVU5ECUNGR19FTlZfU0laRQorCisvKgorICogTWVtb3J5IG1hcAorICovCisjZGVmaW5lIENGR19NQkFSCQkweEYwMDAwMDAwCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19ERUZBVUxUX01CQVIJMHg4MDAwMDAwMAorCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCU1QQzVYWFhfU1JBTQorI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECU1QQzVYWFhfU1JBTV9TSVpFCisKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQKKworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCVRFWFRfQkFTRQorI2lmIChDRkdfTU9OSVRPUl9CQVNFIDwgQ0ZHX0ZMQVNIX0JBU0UpCisjZGVmaW5lIENGR19SQU1CT09UCQkxCisjZW5kaWYKKworLyogQ0ZHX01PTklUT1JfTEVOIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBDRkdfRU5WX1NFQ1RfU0laRSAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSg1MTIgPDwgMTApCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoNTEyIDw8IDEwKQorI2RlZmluZSBDRkdfQk9PVE1BUFNaCQkoOCA8PCAyMCkKKworLyoKKyAqIEV0aGVybmV0IGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQgNQorCisjZGVmaW5lIENPTkZJR19FMTAwMAorI2RlZmluZSBDT05GSUdfRTEwMDBfRkFMTEJBQ0tfTUFDCTB4YjZiNDQ1ZWJmYmMwCisjdW5kZWYgQ09ORklHX01QQzV4eHhfRkVDCisjdW5kZWYgQ09ORklHX1BIWV9BRERSCisjZGVmaW5lIENPTkZJR19ORVRERVYJCWV0aDAKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORworI2RlZmluZSBDRkdfUFJPTVBUX0hVU0hfUFMyIAkiPiAiCisjdW5kZWYgCUNGR19MT05HSEVMUAorI2RlZmluZSBDRkdfUFJPTVBUCQkiPT4gIgorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQlNJWkUJCTEwMjQKKyNlbHNlCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgorI2VuZGlmCisjZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KQorI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYKKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDgwMDAwMAorI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MDJmMDAwMDAKKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisKKy8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisjZGVmaW5lIENGR19MT0FEX0FERFIJCTB4MDIwMDAwMDAKKy8qIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRmdHAgYW5kIGJvb3RtICovCisjZGVmaW5lIENPTkZJR19MT0FEQUREUiAJMHgwMDIwMDAwMAorCisvKgorICogVmFyaW91cyBsb3ctbGV2ZWwgc2V0dGluZ3MKKyAqLworI2RlZmluZSBDRkdfR1BTX1BPUlRfQ09ORklHCTB4MjAwMDAwMDQKKworI2RlZmluZSBDRkdfSElEMF9JTklUCQkoSElEMF9JQ0UgfCBISUQwX0lDRkkpCisjZGVmaW5lIENGR19ISUQwX0ZJTkFMCQlISUQwX0lDRQorCisjZGVmaW5lIENGR19CT09UQ1NfU1RBUlQJQ0ZHX0ZMQVNIX0JBU0UKKyNkZWZpbmUgQ0ZHX0JPT1RDU19TSVpFCQlDRkdfRkxBU0hfU0laRQorI2RlZmluZSBDRkdfQk9PVENTX0NGRwkJMHgwMDA0NzgwMAorI2RlZmluZSBDRkdfQ1MwX1NUQVJUCQlDRkdfRkxBU0hfQkFTRQorI2RlZmluZSBDRkdfQ1MwX1NJWkUJCUNGR19GTEFTSF9TSVpFCisKKyNkZWZpbmUgQ0ZHX0NTX0JVUlNUCQkweDAwMDAwMGYwCisjZGVmaW5lIENGR19DU19ERUFEQ1lDTEUJMHgzMzMzMzMwMworCisjZGVmaW5lIENGR19SRVNFVF9BRERSRVNTCTB4MDAwMDAxMDAKKworI3VuZGVmIEZQR0FfREVCVUcKKyN1bmRlZiBDRkdfRlBHQV9QUk9HX0ZFRURCQUNLCisjZGVmaW5lIENPTkZJR19GUEdBCQlDRkdfQUxURVJBX0NZQ0xPTjIKKyNkZWZpbmUgQ09ORklHX0ZQR0FfQUxURVJBCTEKKyNkZWZpbmUgQ09ORklHX0ZQR0FfQ1lDTE9OMgkxCisjZGVmaW5lIENPTkZJR19GUEdBX0NPVU5UCTEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYWRzNTEyMS5oIGIvaW5jbHVkZS9jb25maWdzL2FkczUxMjEuaAppbmRleCA0MjI2NTI5Li5mMTA0ZTY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvYWRzNTEyMS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9hZHM1MTIxLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYgX19DT05GSUdfSAogI2RlZmluZSBfX0NPTkZJR19ICiAKKyNkZWZpbmUgQ09ORklHX0FEUzUxMjEgMQogLyoKICAqIE1lbW9yeSBtYXAgZm9yIHRoZSBBRFM1MTIxIGJvYXJkOgogICoKQEAgLTU3LDcgKzU4LDEyIEBACiAKIC8qIENPTkZJR19QQ0kgaXMgZGVmaW5lZCBhdCBjb25maWcgdGltZSAqLwogCisjaWZkZWYgQ09ORklHX0FEUzUxMjFfUkVWMgogI2RlZmluZSBDRkdfTVBDNTEyWF9DTEtJTgk2NjAwMDAwMAkvKiBpbiBIeiAqLworI2Vsc2UKKyNkZWZpbmUgQ0ZHX01QQzUxMlhfQ0xLSU4JMzMzMzMzMzMJLyogaW4gSHogKi8KKyNkZWZpbmUgQ09ORklHX1BDSQorI2VuZGlmCiAKICNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgkJLyogY2FsbCBib2FyZF9lYXJseV9pbml0X2YoKSAqLwogI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKQEAgLTcxLDcgKzc3LDExIEBACiAvKgogICogRERSIFNldHVwIC0gbWFudWFsbHkgc2V0IGFsbCBwYXJhbWV0ZXJzIGFzIHRoZXJlJ3Mgbm8gU1BEIGV0Yy4KICAqLworI2lmZGVmIENPTkZJR19BRFM1MTIxX1JFVjIKICNkZWZpbmUgQ0ZHX0REUl9TSVpFCQkyNTYJCS8qIE1CICovCisjZWxzZQorI2RlZmluZSBDRkdfRERSX1NJWkUJCTUxMgkJLyogTUIgKi8KKyNlbmRpZgogI2RlZmluZSBDRkdfRERSX0JBU0UJCTB4MDAwMDAwMDAJLyogRERSIGlzIHN5c3RlbSBtZW1vcnkqLwogI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkJQ0ZHX0REUl9CQVNFCiAKQEAgLTExOSwxNCArMTI5LDIwIEBACiAgKglbMDk6MDVdCURSQU0gdFJQOgogICoJWzA0OjAwXSBEUkFNIHRSUEEKICAqLwotCisjaWZkZWYgQ09ORklHX0FEUzUxMjFfUkVWMgogI2RlZmluZSBDRkdfTUREUkNfU1lTX0NGRwkweEY4NjA0QTAwCiAjZGVmaW5lIENGR19NRERSQ19TWVNfQ0ZHX1JVTgkweEU4NjA0QTAwCisjZGVmaW5lIENGR19NRERSQ19USU1FX0NGRzEJMHg1NEVDMTE2OAorI2RlZmluZSBDRkdfTUREUkNfVElNRV9DRkcyCTB4MzUyMTA4NjQKKyNlbHNlCisjZGVmaW5lIENGR19NRERSQ19TWVNfQ0ZHCSAweEZBODA0QTAwCisjZGVmaW5lIENGR19NRERSQ19TWVNfQ0ZHX1JVTgkgMHhFQTgwNEEwMAorI2RlZmluZSBDRkdfTUREUkNfVElNRV9DRkcxCSAweDY4RUMxMTY4CisjZGVmaW5lIENGR19NRERSQ19USU1FX0NGRzIJIDB4MzQzMTA4NjQKKyNlbmRpZgogI2RlZmluZSBDRkdfTUREUkNfU1lTX0NGR19FTgkweEYwMDAwMDAwCiAjZGVmaW5lIENGR19NRERSQ19USU1FX0NGRzAJMHgwMDAwM0QyRQogI2RlZmluZSBDRkdfTUREUkNfVElNRV9DRkcwX1JVTgkweDA2MTgzRDJFCi0jZGVmaW5lIENGR19NRERSQ19USU1FX0NGRzEJMHg1NEVDMTE2OAotI2RlZmluZSBDRkdfTUREUkNfVElNRV9DRkcyCTB4MzUyMTA4NjQKIAogI2RlZmluZSBDRkdfTUlDUk9OX05PUAkJMHgwMTM4MDAwMAogI2RlZmluZSBDRkdfTUlDUk9OX1BDSEdfQUxMCTB4MDExMDA0MDAKQEAgLTE2NSwxMiArMTgxLDE3IEBACiAvKgogICogTk9SIEZMQVNIIG9uIHRoZSBMb2NhbCBCdXMKICAqLworI3VuZGVmIENPTkZJR19CS1VQX0ZMQVNICiAjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogdXNlIHRoZSBDb21tb24gRmxhc2ggSW50ZXJmYWNlICovCiAjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogdXNlIHRoZSBDRkkgZHJpdmVyICovCisjaWZkZWYgQ09ORklHX0JLVVBfRkxBU0gKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4RkY4MDAwMDAJLyogc3RhcnQgb2YgRkxBU0ggICAqLworI2RlZmluZSBDRkdfRkxBU0hfU0laRQkJMHgwMDgwMDAwMAkvKiBtYXggZmxhc2ggc2l6ZSBpbiBieXRlcyAqLworI2Vsc2UKICNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4RkMwMDAwMDAJLyogc3RhcnQgb2YgRkxBU0ggICAqLwogI2RlZmluZSBDRkdfRkxBU0hfU0laRQkJMHgwNDAwMDAwMAkvKiBtYXggZmxhc2ggc2l6ZSBpbiBieXRlcyAqLworI2VuZGlmCiAjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCi0KICNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCQkvKiBudW1iZXIgb2YgYmFua3MgKi8KICNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJe0NGR19GTEFTSF9CQVNFfQogI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMjU2CQkvKiBtYXggc2VjdG9ycyBwZXIgZGV2aWNlICovCkBAIC0yODYsMTQgKzMwNywxMyBAQAogI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCiAjZGVmaW5lIENPTkZJR19QSFlfQUREUgkJMHgxCiAjZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50CQkqLworI2RlZmluZSBDT05GSUdfRkVDX0FOX1RJTUVPVVQJMQogCi0jaWYgMAogLyoKICAqIENvbmZpZ3VyZSBvbi1ib2FyZCBSVEMKICAqLwotI2RlZmluZSBDT05GSUdfUlRDX0RTMTM3NAkJCS8qIHVzZSBkczEzNzQgcnRjIHZpYSBpMmMJKi8KKyNkZWZpbmUgQ09ORklHX1JUQ19NNDFUNjIJCQkvKiB1c2UgTTQxVDYyIHJ0YyB2aWEgaTIgKi8KICNkZWZpbmUgQ0ZHX0kyQ19SVENfQUREUgkJMHg2OAkvKiBhdCBhZGRyZXNzIDB4NjgJCSovCi0jZW5kaWYKIAogLyoKICAqIEVudmlyb25tZW50CkBAIC0zMDIsNyArMzIyLDExIEBACiAvKiBUaGlzIGhhcyB0byBiZSBhIG11bHRpcGxlIG9mIHRoZSBGbGFzaCBzZWN0b3Igc2l6ZSAqLwogI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFICsgQ0ZHX01PTklUT1JfTEVOKQogI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMAorI2lmZGVmIENPTkZJR19CS1VQX0ZMQVNICisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4MjAwMDAJLyogb25lIHNlY3RvciAoMjU2SykgZm9yIGVudiAqLworI2Vsc2UKICNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHg0MDAwMAkvKiBvbmUgc2VjdG9yICgyNTZLKSBmb3IgZW52ICovCisjZW5kaWYKIAogLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiBSZWR1bmRhbnQgRW52aXJvbm1lbnQgU2VjdG9yCSovCiAjZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQpAQCAtMzIxLDYgKzM0NSw3IEBACiAjZGVmaW5lIENPTkZJR19DTURfUElORwogI2RlZmluZSBDT05GSUdfQ01EX1JFR0lORk8KICNkZWZpbmUgQ09ORklHX0NNRF9FRVBST00KKyNkZWZpbmUgQ09ORklHX0NNRF9EQVRFCiAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCiAjZGVmaW5lIENPTkZJR19DTURfUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvZGF2aW5jaV9zZmZzZHIuaCBiL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX3NmZnNkci5oCmluZGV4IDBlNDllNmMuLjdjODYwZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX3NmZnNkci5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX3NmZnNkci5oCkBAIC0xMzcsNiArMTM3LDcgQEAKICNkZWZpbmUgQ09ORklHX0NNRF9TQVZFUwogI2RlZmluZSBDT05GSUdfQ01EX05BTkQKICNkZWZpbmUgQ09ORklHX0NNRF9FRVBST00KKyNkZWZpbmUgQ09ORklHX0NNRF9FTEYJLyogTmVlZGVkIHRvIGxvYWQgSW50ZWdyaXR5IGtlcm5lbC4gKi8KICN1bmRlZiBDT05GSUdfQ01EX0JESQogI3VuZGVmIENPTkZJR19DTURfRlBHQQogI3VuZGVmIENPTkZJR19DTURfU0VUR0VURENSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvcHhhMjU1X2lkcC5oIGIvaW5jbHVkZS9jb25maWdzL3B4YTI1NV9pZHAuaAppbmRleCA0YTljYWRiLi5hMmYzNjUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvcHhhMjU1X2lkcC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9weGEyNTVfaWRwLmgKQEAgLTEyNiw3ICsxMjYsMTAgQEAKICNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCiAjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYm9vdG0gNDAwMDAiCiAjZGVmaW5lIENPTkZJR19CT09UQVJHUwkJInJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT1jcmFtZnMgY29uc29sZT10dHlTMCwxMTUyMDAiCi0jZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRworCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLyogI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMSAqLwogCiAvKgogICogQ3VycmVudCBtZW1vcnkgbWFwIGZvciBWaWJyZW4gc3VwcGxpZWQgTGludXggaW1hZ2VzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NiYzg1NjAuaCBiL2luY2x1ZGUvY29uZmlncy9zYmM4NTYwLmgKaW5kZXggMTQ2ZWFmZS4uNjM0NWNjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NiYzg1NjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc2JjODU2MC5oCkBAIC0yNCw4ICsyNCw4IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLS8qIG1wYzg1NjBhZHMgYm9hcmQgY29uZmlndXJhdGlvbiBmaWxlICovCi0vKiBwbGVhc2UgcmVmZXIgdG8gZG9jL1JFQURNRS5tcGM4NXh4IGZvciBtb3JlIGluZm8gKi8KKy8qIHNiYzg1NjAgYm9hcmQgY29uZmlndXJhdGlvbiBmaWxlICovCisvKiBwbGVhc2UgcmVmZXIgdG8gZG9jL1JFQURNRS5zYmM4NTYwIGZvciBtb3JlIGluZm8gKi8KIC8qIG1ha2Ugc3VyZSB5b3UgY2hhbmdlIHRoZSBNQUMgYWRkcmVzcyBhbmQgb3RoZXIgbmV0d29yayBwYXJhbXMgZmlyc3QsCiAgKiBzZWFyY2ggZm9yIENPTkZJR19FVEhBRERSLENPTkZJR19TRVJWRVJJUCxldGMgaW4gdGhpcyBmaWxlCiAgKi8KQEAgLTEwMiwxMSArMTAyLDExIEBACiAjZGVmaW5lIENGR19TRFJBTV9TSVpFCQk1MTIJCS8qIEREUiBpcyA1MTJNQiAqLwogI2RlZmluZSBTUERfRUVQUk9NX0FERFJFU1MJMHg1NQkJLyogIEREUiBESU1NICovCiAKLSN1bmRlZiAgQ09ORklHX0REUl9FQ0MJCQkJLyogb25seSBmb3IgRUNDIEREUiBtb2R1bGUJKi8KLSN1bmRlZiAgQ09ORklHX1NQRF9FRVBST00JCQkvKiBVc2UgU1BEIEVFUFJPTSBmb3IgRERSIHNldHVwICovCisjdW5kZWYgIENPTkZJR19ERFJfRUNDCQkJLyogb25seSBmb3IgRUNDIEREUiBtb2R1bGUJKi8KKyN1bmRlZiAgQ09ORklHX1NQRF9FRVBST00JCS8qIFVzZSBTUEQgRUVQUk9NIGZvciBERFIgc2V0dXAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX01QQzg1eHhfUkVWMSkKLSAgI2RlZmluZSBDT05GSUdfRERSX0RMTAkJCS8qIHBvc3NpYmxlIERMTCBmaXggbmVlZGVkCSovCisgICNkZWZpbmUgQ09ORklHX0REUl9ETEwJCS8qIHBvc3NpYmxlIERMTCBmaXggbmVlZGVkCSovCiAjZW5kaWYKIAogI3VuZGVmIENPTkZJR19DTE9DS1NfSU5fTUhaCkBAIC0xNzcsOCArMTc3LDggQEAKICNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCSgxMjggKiAxMDI0KQkvKiBSZXNlcnZlZCBmb3IgbWFsbG9jICovCiAKIC8qIFNlcmlhbCBQb3J0ICovCi0jdW5kZWYgIENPTkZJR19DT05TX09OX1NDQwkJCS8qIGRlZmluZSBpZiBjb25zb2xlIG9uIFNDQyAqLwotI3VuZGVmCUNPTkZJR19DT05TX05PTkUJCQkvKiBkZWZpbmUgaWYgY29uc29sZSBvbiBzb21ldGhpbmcgZWxzZSAqLworI3VuZGVmICBDT05GSUdfQ09OU19PTl9TQ0MJLyogZGVmaW5lIGlmIGNvbnNvbGUgb24gU0NDICovCisjdW5kZWYJQ09ORklHX0NPTlNfTk9ORQkvKiBkZWZpbmUgaWYgY29uc29sZSBvbiBzb21ldGhpbmcgZWxzZSAqLwogCiAjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCTEKICN1bmRlZglDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8KQEAgLTIwMCw2ICsyMDAsMTEgQEAKICNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMiAiPiAiCiAjZW5kaWYKIAorLyogcGFzcyBvcGVuIGZpcm13YXJlIGZsYXQgdHJlZSAqLworI2RlZmluZSBDT05GSUdfT0ZfTElCRkRUICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ09ORklHX09GX0JPQVJEX1NFVFVQICAgICAgICAgICAxCisjZGVmaW5lIENPTkZJR19PRl9TVERPVVRfVklBX0FMSUFTICAgICAgMQorCiAvKgogICogSTJDCiAgKi8KQEAgLTIxNSwxNiArMjIwLDI4IEBACiAjZGVmaW5lIENGR19QQ0lfTUVNX1BIWVMJMHhDMDAwMDAwMAogI2RlZmluZSBDRkdfUENJX01FTV9TSVpFCTB4MTAwMDAwMDAKIAotI2lmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkJCS8qIFRTRUMgRXRoZXJuZXQgcG9ydCAqLworI2lmZGVmIENPTkZJR19UU0VDX0VORVQKIAotIyAgZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJMQotIyAgZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50CQkqLwotIyAgZGVmaW5lIENPTkZJR19NUEM4NXh4X1RTRUMxCi0jICBkZWZpbmUgQ09ORklHX01QQzg1eHhfVFNFQzFfTkFNRQkiVFNFQzAiCi0jICBkZWZpbmUgVFNFQzFfUEhZX0FERFIJMjUKLSMgIGRlZmluZSBUU0VDMV9QSFlJRFgJCTAKLS8qIE9wdGlvbnMgYXJlOiBUU0VDMCAqLwotIyAgZGVmaW5lIENPTkZJR19FVEhQUklNRQkJIlRTRUMwIgorI2lmbmRlZiBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkgCTEKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19NSUkKKyNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KKyNlbmRpZgorI2RlZmluZSBDT05GSUdfVFNFQzEJMQorI2RlZmluZSBDT05GSUdfVFNFQzFfTkFNRQkiVFNFQzAiCisjZGVmaW5lIENPTkZJR19UU0VDMgkxCisjZGVmaW5lIENPTkZJR19UU0VDMl9OQU1FCSJUU0VDMSIKKyNkZWZpbmUgVFNFQzFfUEhZX0FERFIJCTB4MTkKKyNkZWZpbmUgVFNFQzJfUEhZX0FERFIJCTB4MWEKKyNkZWZpbmUgVFNFQzFfUEhZSURYCQkwCisjZGVmaW5lIFRTRUMyX1BIWUlEWAkJMAorI2RlZmluZSBUU0VDMV9GTEFHUwkJVFNFQ19HSUdBQklUCisjZGVmaW5lIFRTRUMyX0ZMQUdTCQlUU0VDX0dJR0FCSVQKKworLyogT3B0aW9ucyBhcmU6IFRTRUNbMC0xXSAqLworI2RlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJUU0VDMCIKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKQkvKiBDUE0gRkNDIEV0aGVybmV0ICovCiAKQEAgLTI3MiwyMCArMjg5LDIwIEBACiAgKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCiAgKi8KIAotI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkxCS8qIEZsYXNoIGlzIENGSSBjb25mb3JtYW50CQkqLwotI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkxCS8qIFVzZSB0aGUgY29tbW9uIGRyaXZlcgkJKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJMQkvKiBGbGFzaCBpcyBDRkkgY29uZm9ybWFudAkqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkxCS8qIFVzZSB0aGUgY29tbW9uIGRyaXZlcgkqLwogI2lmIDAKLSNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUgMSAgICAvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAgICAgKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04JCS8qIHVzZSBoYXJkd2FyZSBwcm90ZWN0aW9uCQkqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSAxICAgIC8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04JCS8qIHVzZSBoYXJkd2FyZSBwcm90ZWN0aW9uCSovCiAjZW5kaWYKLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTY0CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk2NAkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCSovCiAKICN1bmRlZglDRkdfRkxBU0hfQ0hFQ0tTVU0KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMjAwMDAwCQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCi0jZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMDAwCQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTIwMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykgKi8KIAotI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCVRFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yCSovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJVEVYVF9CQVNFIC8qIHN0YXJ0IG9mIG1vbml0b3IJKi8KIAogI2lmIDAKIC8qIFhYWCBUaGlzIGRvZXNuJ3Qgd29yayBhbmQgSSBkb24ndCB3YW50IHRvIGZpeCBpdCAqLwpAQCAtMzE1LDkgKzMzMiw4IEBACiAgICNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAKICNlbmRpZgogCi0jZGVmaW5lIENPTkZJR19CT09UQVJHUyAicm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE5Mi4xNjguMC4yNTE6L3RmdHBib290IGlwPTE5Mi4xNjguMC4xMDU6MTkyLjE2OC4wLjI1MTo6MjU1LjI1NS4yNTUuMDpzYmM4NTYwOmV0aDA6b2ZmIGNvbnNvbGU9dHR5UzAsOTYwMCIKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTICJyb290PS9kZXYvbmZzIHJ3IGlwPWRoY3AgY29uc29sZT10dHlTMCw5NjAwIgogLyojZGVmaW5lIENPTkZJR19CT09UQVJHUyAgICAgICJyb290PS9kZXYvcmFtIHJ3IGNvbnNvbGU9dHR5UzAsMTE1MjAwIiovCi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYm9vdG0gMHhmZjgwMDAwMCAweGZmYTAwMDAwIgogI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTUJLyogLTEgZGlzYWJsZSBhdXRvYm9vdCAqLwogCiAjZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCTEJLyogZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkCSovCkBAIC0zODksMjUgKzQwNSw1NyBAQAogI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJCS8qIFNvZnR3YXJlIHJlYm9vdAkJKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9LR0RCKQotICAjZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTIzMDQwMAkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLwotICAjZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkyCS8qIHdoaWNoIHNlcmlhbCBwb3J0IHRvIHVzZSAqLworI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkyMzA0MDAJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTIJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCiAjZW5kaWYKIAotLypOb3RlOiBjaGFuZ2UgYmVsb3cgZm9yIHlvdXIgbmV0d29yayBzZXR0aW5nISEhICovCiAjaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKSB8fCBkZWZpbmVkKENPTkZJR19FVEhFUl9PTl9GQ0MpCi0jICBkZWZpbmUgQ09ORklHX0VUSEFERFIJMDA6MDE6YWY6MDc6OWI6OGEKLSMgIGRlZmluZSBDT05GSUdfSEFTX0VUSDEKLSMgIGRlZmluZSBDT05GSUdfRVRIMUFERFIJMDA6MDE6YWY6MDc6OWI6OGIKLSMgIGRlZmluZSBDT05GSUdfSEFTX0VUSDIKLSMgIGRlZmluZSBDT05GSUdfRVRIMkFERFIJMDA6MDE6YWY6MDc6OWI6OGMKKyNkZWZpbmUgQ09ORklHX0hBU19FVEgwCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMQogI2VuZGlmCiAKLSNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMTMxCi0jZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4xMDUKLSNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUAkwLjAuMC4wCi0jZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCisvKiBZb3UgY2FuIGNvbXBpbGUgaW4gYSBNQUMgYWRkcmVzcyBhbmQgeW91ciBjdXN0b20gbmV0IHNldHRpbmdzIGJ5IHVzaW5nCisgKiB0aGUgZm9sbG93aW5nIHN5bnRheC4gIFlvdXIgYm9hcmQgc2hvdWxkIGJlIG1hcmtlZCB3aXRoIHRoZSBhc3NpZ25lZAorICogTUFDIGFkZHJlc3NlcyBkaXJlY3RseSBvbiBpdC4KKyAqCisgKiAjZGVmaW5lIENPTkZJR19FVEhBRERSCQlkZTphZDpiZTplZjowMDowMAorICogI2RlZmluZSBDT05GSUdfRVRIMUFERFIJCWZhOmtlOmFkOmRyOmVzOnMhCisgKiAjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJPHNlcnZlciBpcD4KKyAqICNkZWZpbmUgQ09ORklHX0lQQUREUgkJPGJvYXJkIGlwPgorICogI2RlZmluZSBDT05GSUdfR0FURVdBWUlQCQk8Z2F0ZXdheSBpcD4KKyAqICNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTx5b3VyIG5ldG1hc2s+CisgKi8KKwogI2RlZmluZSBDT05GSUdfSE9TVE5BTUUJCVNCQzg1NjAKICNkZWZpbmUgQ09ORklHX1JPT1RQQVRICQkvaG9tZS9wcGMKLSNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQlwSW1hZ2UKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQl1SW1hZ2UKKworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCVwKKwkiY29uc29sZWRldj10dHlTMFwwIgkJCQlcCisJInJhbWRpc2thZGRyPTIwMDAwMDBcMCIJCQlcCisJInJhbWRpc2tmaWxlPXJhbWRpc2sudWJvb3RcMCIJCQlcCisJImZkdGFkZHI9YzAwMDAwXDAiCQkJCVwKKwkiZmR0ZmlsZT1zYmM4NTYwLmR0YlwwIgorCisjZGVmaW5lIENPTkZJR19ORlNCT09UQ09NTUFORAkJCQkJCVwKKwkic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgIgkJCQlcCisJCSJuZnNyb290PSRzZXJ2ZXJpcDokcm9vdHBhdGggIgkJCQlcCisJCSJpcD0kaXBhZGRyOiRzZXJ2ZXJpcDokZ2F0ZXdheWlwOiRuZXRtYXNrOiRob3N0bmFtZTokbmV0ZGV2Om9mZiAiIFwKKwkJImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiCQlcCisJInRmdHAgJGxvYWRhZGRyICRib290ZmlsZTsiCQkJCQlcCisJInRmdHAgJGZkdGFkZHIgJGZkdGZpbGU7IgkJCQkJXAorCSJib290bSAkbG9hZGFkZHIgLSAkZmR0YWRkciIKKworCisjZGVmaW5lIENPTkZJR19SQU1CT09UQ09NTUFORCBcCisJInNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3ICIJCQkJXAorCQkiY29uc29sZT0kY29uc29sZWRldiwkYmF1ZHJhdGUgJG90aGJvb3RhcmdzOyIJCVwKKwkidGZ0cCAkcmFtZGlza2FkZHIgJHJhbWRpc2tmaWxlOyIJCQkJXAorCSJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IgkJCQkJXAorCSJ0ZnRwICRmZHRhZGRyICRmZHRmaWxlOyIJCQkJCVwKKwkiYm9vdG0gJGxvYWRhZGRyICRyYW1kaXNrYWRkciAkZmR0YWRkciIKKworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJQ09ORklHX05GU0JPT1RDT01NQU5ECiAKICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc2M1MjBfc3B1bmsuaCBiL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVuay5oCmluZGV4IDA1MWIyZTAuLjA3MjY3NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVuay5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVuay5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogI2RlZmluZSBDT05GSUdfU1BJX0VFUFJPTSAgICAgICAvKiBTUEkgRUVQUk9NcyBzdWNoIGFzIEFUMjUwMTAgb3IgQVQyNTY0MCAqLwogI2RlZmluZSBDT05GSUdfTVdfRUVQUk9NICAgICAgICAvKiBNaWNyb1dpcmUgRUVQUk9NUyBzdWNoIGFzIEFUOTNMQzQ2ICovCi0jZGVmaW5lIENPTkZJR19EUzE3MjIgICAgICAgICAgIC8qIERhbGxhcyBEUzE3MjIgU1BJIFRlbXBlcmF0dXJlIHByb2JlICovCisjZGVmaW5lIENPTkZJR19EVFRfRFMxNzIyICAgICAgIC8qIERhbGxhcyBEUzE3MjIgU1BJIFRlbXBlcmF0dXJlIHByb2JlICovCiAKIAogLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kYXRhZmxhc2guaCBiL2luY2x1ZGUvZGF0YWZsYXNoLmgKaW5kZXggZjIwYzczOC4uODBmMDYzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kYXRhZmxhc2guaAorKysgYi9pbmNsdWRlL2RhdGFmbGFzaC5oCkBAIC0xMzcsNiArMTM3LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgQVQ0NURCMTYxCTB4MmMKKyNkZWZpbmUgQVQ0NURCMDIxCTB4MTQKICNkZWZpbmUgQVQ0NURCMzIxCTB4MzQKICNkZWZpbmUgQVQ0NURCNjQyCTB4M2MKICNkZWZpbmUgQVQ0NURCMTI4CTB4MTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHR0LmggYi9pbmNsdWRlL2R0dC5oCmluZGV4IDRlOGFhYWQuLjM0MDUzZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHR0LmgKKysrIGIvaW5jbHVkZS9kdHQuaApAQCAtNDAsOSArNDAsMTEgQEAKICNkZWZpbmUgRFRUX0NPTU1FUkNJQUxfTUFYX1RFTVAJNzAJCS8qIDAgLSArNzAgQyAqLwogI2RlZmluZSBEVFRfSU5EVVNUUklBTF9NQVhfVEVNUAk4NQkJLyogLTQwIC0gKzg1IEMgKi8KICNkZWZpbmUgRFRUX0FVVE9NT1RJVkVfTUFYX1RFTVAJMTA1CQkvKiAtNDAgLSArMTA1IEMgKi8KKwogI2lmbmRlZiBDRkdfRFRUX01BWF9URU1QCiAjZGVmaW5lIENGR19EVFRfTUFYX1RFTVAgRFRUX0NPTU1FUkNJQUxfTUFYX1RFTVAKICNlbmRpZgorCiAjaWZuZGVmIENGR19EVFRfSFlTVEVSRVNJUwogI2RlZmluZSBDRkdfRFRUX0hZU1RFUkVTSVMJNQkJLyogNSBDICovCiAjZW5kaWYKQEAgLTU0LDc5ICs1Niw0IEBACiBleHRlcm4gaW50IGR0dF9nZXRfdGVtcChpbnQgc2Vuc29yKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRFRUX0xNNzUpCi0jZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MAotI2RlZmluZSBEVFRfQ09ORklHCQkweDEKLSNkZWZpbmUgRFRUX1RFTVBfSFlTVAkJMHgyCi0jZGVmaW5lIERUVF9URU1QX1NFVAkJMHgzCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0RUVF9MTTgxKQotI2RlZmluZSBEVFRfUkVBRF9URU1QCQkweDI3Ci0jZGVmaW5lIERUVF9DT05GSUdfVEVNUAkJMHg0YgotI2RlZmluZSBEVFRfVEVNUF9NQVgJCTB4MzkKLSNkZWZpbmUgRFRUX1RFTVBfSFlTVAkJMHgzYQotI2RlZmluZSBEVFRfQ09ORklHCQkweDQwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0RUVF9EUzE2MjEpCi0jZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4QUEKLSNkZWZpbmUgRFRUX1JFQURfQ09VTlRFUgkweEE4Ci0jZGVmaW5lIERUVF9SRUFEX1NMT1BFCQkweEE5Ci0jZGVmaW5lIERUVF9XUklURV9TVEFSVF9DT05WCTB4RUUKLSNkZWZpbmUgRFRUX1dSSVRFX1NUT1BfQ09OVgkweDIyCi0jZGVmaW5lIERUVF9URU1QX0hJR0gJCTB4QTEKLSNkZWZpbmUgRFRUX1RFTVBfTE9XCQkweEEyCi0jZGVmaW5lIERUVF9DT05GSUcJCTB4QUMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRFRUX0RTMTc3NSkKLSNkZWZpbmUgRFRUX1JFQURfVEVNUAkJMHgwCi0jZGVmaW5lIERUVF9DT05GSUcJCTB4MQotI2RlZmluZSBEVFRfVEVNUF9IWVNUCQkweDIKLSNkZWZpbmUgRFRUX1RFTVBfT1MJCTB4MwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19EVFRfQURNMTAyMSkKLSNkZWZpbmUgRFRUX1JFQURfTE9DX1ZBTFVFCTB4MDAKLSNkZWZpbmUgRFRUX1JFQURfUkVNX1ZBTFVFCTB4MDEKLSNkZWZpbmUgRFRUX1JFQURfU1RBVFVTCQkweDAyCi0jZGVmaW5lIERUVF9SRUFEX0NPTkZJRwkJMHgwMwotI2RlZmluZSBEVFRfUkVBRF9DT05WUkFURQkweDA0Ci0jZGVmaW5lIERUVF9SRUFEX0xPQ19ISUdITElNCTB4MDUKLSNkZWZpbmUgRFRUX1JFQURfTE9DX0xPV0xJTQkweDA2Ci0jZGVmaW5lIERUVF9SRUFEX1JFTV9ISUdITElNCTB4MDcKLSNkZWZpbmUgRFRUX1JFQURfUkVNX0xPV0xJTQkweDA4Ci0jZGVmaW5lIERUVF9SRUFEX0RFVklECQkweGZlCi0KLSNkZWZpbmUgRFRUX1dSSVRFX0NPTkZJRwkweDA5Ci0jZGVmaW5lIERUVF9XUklURV9DT05WUkFURQkweDBhCi0jZGVmaW5lIERUVF9XUklURV9MT0NfSElHSExJTQkweDBiCi0jZGVmaW5lIERUVF9XUklURV9MT0NfTE9XTElNCTB4MGMKLSNkZWZpbmUgRFRUX1dSSVRFX1JFTV9ISUdITElNCTB4MGQKLSNkZWZpbmUgRFRUX1dSSVRFX1JFTV9MT1dMSU0JMHgwZQotI2RlZmluZSBEVFRfV1JJVEVfT05FU0hPVAkweDBmCi0KLSNkZWZpbmUgRFRUX1NUQVRVU19CVVNZCQkweDgwCS8qIDE9QURDIENvbnZlcnRpbmcgKi8KLSNkZWZpbmUgRFRUX1NUQVRVU19MSElHSAkweDQwCS8qIDE9TG9jYWwgSGlnaCBUZW1wIExpbWl0IFRyaXBwZWQgKi8KLSNkZWZpbmUgRFRUX1NUQVRVU19MTE9XCQkweDIwCS8qIDE9TG9jYWwgTG93IFRlbXAgTGltaXQgVHJpcHBlZCAqLwotI2RlZmluZSBEVFRfU1RBVFVTX1JISUdICTB4MTAJLyogMT1SZW1vdGUgSGlnaCBUZW1wIExpbWl0IFRyaXBwZWQgKi8KLSNkZWZpbmUgRFRUX1NUQVRVU19STE9XCQkweDA4CS8qIDE9UmVtb3RlIExvdyBUZW1wIExpbWl0IFRyaXBwZWQgKi8KLSNkZWZpbmUgRFRUX1NUQVRVU19PUEVOCQkweDA0CS8qIDE9UmVtb3RlIFNlbnNvciBPcGVuLUNpcmN1aXQgKi8KLQotI2RlZmluZSBEVFRfQ09ORklHX0FMRVJUX01BU0tFRAkweDgwCS8qIDA9QUxFUlQgRW5hYmxlZCwgMT1BTEVSVCBNYXNrZWQgKi8KLSNkZWZpbmUgRFRUX0NPTkZJR19TVEFOREJZCTB4NDAJLyogMD1SdW4sIDE9U3RhbmRieSAqLwotCi0jZGVmaW5lIERUVF9BRE0xMDIxX0RFVklECTB4NDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRFRUX0xNNzMpCi0jZGVmaW5lIERUVF9SRUFEX1RFTVAJCTB4MAotI2RlZmluZSBEVFRfQ09ORklHCQkweDEKLSNkZWZpbmUgRFRUX1RFTVBfSElHSAkJMHgyCi0jZGVmaW5lIERUVF9URU1QX0xPVwkJMHgzCi0jZGVmaW5lIERUVF9DT05UUk9MCQkweDQKLSNkZWZpbmUgRFRUX0lECQkJMHg3Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9EVFRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmR0X3N1cHBvcnQuaCBiL2luY2x1ZGUvZmR0X3N1cHBvcnQuaAppbmRleCA4OTA5OTNmLi5hN2M2MzI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZkdF9zdXBwb3J0LmgKKysrIGIvaW5jbHVkZS9mZHRfc3VwcG9ydC5oCkBAIC01Niw2ICs1NiwxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGZkdF9maXh1cF9kcl91c2Iodm9pZCAqYmxvYiwgYmRfdCAqYmQpIHt9CiAjZW5kaWYgLyogQ09ORklHX0hBU19GU0xfRFJfVVNCICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4NXh4KSB8fCBkZWZpbmVkKENPTkZJR19NUEM4M1hYKQordm9pZCBmZHRfZml4dXBfY3J5cHRvX25vZGUodm9pZCAqYmxvYiwgaW50IHNlY19yZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBmZHRfZml4dXBfY3J5cHRvX25vZGUodm9pZCAqYmxvYiwgaW50IHNlY19yZXYpIHt9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19PRl9CT0FSRF9TRVRVUAogdm9pZCBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCk7CiB2b2lkIGZ0X2NwdV9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21wYzV4eHguaCBiL2luY2x1ZGUvbXBjNXh4eC5oCmluZGV4IGE0NTgxYTMuLjVkMTFlZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXBjNXh4eC5oCisrKyBiL2luY2x1ZGUvbXBjNXh4eC5oCkBAIC0xOTgsNiArMTk4LDM1IEBACiAjZGVmaW5lIEdQSU9fUFNDM185CQkweDA0MDAwMDAwVUwKICNkZWZpbmUgR1BJT19QU0MxXzQJCTB4MDEwMDAwMDBVTAogCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDNl8zICAgMHgyMDAwMDAwMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDNl8yICAgMHgxMDAwMDAwMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDM183ICAgMHgwMDAwMjAwMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDM182ICAgMHgwMDAwMTAwMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDM18zICAgMHgwMDAwMDgwMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDM18yICAgMHgwMDAwMDQwMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDM18xICAgMHgwMDAwMDIwMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDM18wICAgMHgwMDAwMDEwMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDMl8zICAgMHgwMDAwMDA4MFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDMl8yICAgMHgwMDAwMDA0MFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDMl8xICAgMHgwMDAwMDAyMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDMl8wICAgMHgwMDAwMDAxMFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDMV8zICAgMHgwMDAwMDAwOFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDMV8yICAgMHgwMDAwMDAwNFVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDMV8xICAgMHgwMDAwMDAwMlVMCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU1QTEVfUFNDMV8wICAgMHgwMDAwMDAwMVVMCisKKyNkZWZpbmUgTVBDNVhYWF9HUElPX1NJTlRfUFNDM181ICAgICAweDAyCisjZGVmaW5lIE1QQzVYWFhfR1BJT19TSU5UX1BTQzNfNCAgICAgMHgwMQorCisjZGVmaW5lIE1QQzVYWFhfR1BJT19XS1VQXzcgICAgICAgICAgMHg4MAorI2RlZmluZSBNUEM1WFhYX0dQSU9fV0tVUF82ICAgICAgICAgIDB4NDAKKyNkZWZpbmUgTVBDNVhYWF9HUElPX1dLVVBfUFNDNl8xICAgICAweDIwCisjZGVmaW5lIE1QQzVYWFhfR1BJT19XS1VQX1BTQzZfMCAgICAgMHgxMAorI2RlZmluZSBNUEM1WFhYX0dQSU9fV0tVUF9FVEgxNyAgICAgIDB4MDgKKyNkZWZpbmUgTVBDNVhYWF9HUElPX1dLVVBfUFNDM185ICAgICAweDA0CisjZGVmaW5lIE1QQzVYWFhfR1BJT19XS1VQX1BTQzJfNCAgICAgMHgwMgorI2RlZmluZSBNUEM1WFhYX0dQSU9fV0tVUF9QU0MxXzQgICAgIDB4MDEKKwogLyogUENJIHJlZ2lzdGVycyAqLwogI2RlZmluZSBNUEM1WFhYX1BDSV9DTUQJCShNUEM1WFhYX1BDSSArIDB4MDQpCiAjZGVmaW5lIE1QQzVYWFhfUENJX0NGRwkJKE1QQzVYWFhfUENJICsgMHgwYykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXBjODN4eC5oIGIvaW5jbHVkZS9tcGM4M3h4LmgKaW5kZXggOTM5YjgyNS4uODk3ZWNkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tcGM4M3h4LmgKKysrIGIvaW5jbHVkZS9tcGM4M3h4LmgKQEAgLTYxLDIxICs2MSwyNiBAQAogI2VuZGlmCiAKICNkZWZpbmUgUEFSVElEX05PX0Uoc3ByaWRyKQkJKChzcHJpZHIgJiAweEZGRkUwMDAwKSA+PiAxNikKLSNkZWZpbmUgSVNfRV9QUk9DRVNTT1Ioc3ByaWRyKQkJKCEoc3ByaWRyICYgMHgwMDAxMDAwMCkpIC8qIGhhcyBTRUMgKi8KKyNkZWZpbmUgU1BSX0ZBTUlMWShzcHJpZHIpCQkoKHNwcmlkciAmIDB4RkZGMDAwMDApID4+IDIwKQogCisjZGVmaW5lIFNQUl84MzFYX0ZBTUlMWQkJCTB4ODBCCiAjZGVmaW5lIFNQUl84MzExCQkJMHg4MEIyCiAjZGVmaW5lIFNQUl84MzEzCQkJMHg4MEIwCiAjZGVmaW5lIFNQUl84MzE0CQkJMHg4MEI2CiAjZGVmaW5lIFNQUl84MzE1CQkJMHg4MEI0CisjZGVmaW5lIFNQUl84MzJYX0ZBTUlMWQkJCTB4ODA2CiAjZGVmaW5lIFNQUl84MzIxCQkJMHg4MDY2CiAjZGVmaW5lIFNQUl84MzIzCQkJMHg4MDYyCisjZGVmaW5lIFNQUl84MzRYX0ZBTUlMWQkJCTB4ODAzCiAjZGVmaW5lIFNQUl84MzQzCQkJMHg4MDM2CiAjZGVmaW5lIFNQUl84MzQ3X1RCR0FfCQkJMHg4MDMyCiAjZGVmaW5lIFNQUl84MzQ3X1BCR0FfCQkJMHg4MDM0CiAjZGVmaW5lIFNQUl84MzQ5CQkJMHg4MDMwCisjZGVmaW5lIFNQUl84MzZYX0ZBTUlMWQkJCTB4ODA0CiAjZGVmaW5lIFNQUl84MzU4X1RCR0FfCQkJMHg4MDRBCiAjZGVmaW5lIFNQUl84MzU4X1BCR0FfCQkJMHg4MDRFCiAjZGVmaW5lIFNQUl84MzYwCQkJMHg4MDQ4CisjZGVmaW5lIFNQUl84MzdYX0ZBTUlMWQkJCTB4ODBDCiAjZGVmaW5lIFNQUl84Mzc3CQkJMHg4MEM2CiAjZGVmaW5lIFNQUl84Mzc4CQkJMHg4MEM0CiAjZGVmaW5lIFNQUl84Mzc5CQkJMHg4MEMyCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BwYzR4eC5oIGIvaW5jbHVkZS9wcGM0eHguaAppbmRleCAwYTg0NzlmLi4xZDA2ZGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BwYzR4eC5oCisrKyBiL2luY2x1ZGUvcHBjNHh4LmgKQEAgLTQ2LDYgKzQ2LDEyIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHXzQ0MCkKKy8qCisgKiBFbmFibGUgbG9uZyBsb25nICglbGwgLi4uKSBwcmludGYgZm9ybWF0IG9uIDQ0MCBQUEMncyBzaW5jZSBtb3N0IG9mCisgKiB0aGVtIHN1cHBvcnQgMzZiaXQgcGh5c2ljYWwgYWRkcmVzc2luZworICovCisjZGVmaW5lIENGR182NEJJVF9WU1BSSU5URgorI2RlZmluZSBDRkdfNjRCSVRfU1RSVE9VTAogI2luY2x1ZGUgPHBwYzQ0MC5oPgogI2Vsc2UKICNpbmNsdWRlIDxwcGM0MDUuaD4KZGlmZiAtLWdpdCBhL2xpYl9hcm0vYm9vdG0uYyBiL2xpYl9hcm0vYm9vdG0uYwppbmRleCA2YjRhODA3Li5iODM4YzM3IDEwMDY0NAotLS0gYS9saWJfYXJtL2Jvb3RtLmMKKysrIGIvbGliX2FybS9ib290bS5jCkBAIC00Myw5ICs0Myw2IEBACiAjIGVuZGlmCiBzdGF0aWMgdm9pZCBzZXR1cF9jb21tYW5kbGluZV90YWcgKGJkX3QgKmJkLCBjaGFyICpjb21tYW5kbGluZSk7CiAKLSNpZiAwCi1zdGF0aWMgdm9pZCBzZXR1cF9yYW1kaXNrX3RhZyAoYmRfdCAqYmQpOwotI2VuZGlmCiAjIGlmZGVmIENPTkZJR19JTklUUkRfVEFHCiBzdGF0aWMgdm9pZCBzZXR1cF9pbml0cmRfdGFnIChiZF90ICpiZCwgdWxvbmcgaW5pdHJkX3N0YXJ0LAogCQkJICAgICAgdWxvbmcgaW5pdHJkX2VuZCk7CmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9sbWIuYyBiL2xpYl9nZW5lcmljL2xtYi5jCmluZGV4IDZiNDZmYTguLjFjNmNmN2MgMTAwNjQ0Ci0tLSBhL2xpYl9nZW5lcmljL2xtYi5jCisrKyBiL2xpYl9nZW5lcmljL2xtYi5jCkBAIC0yNSwxOSArMjUsMjEgQEAKIAlkZWJ1ZygiICAgIG1lbW9yeS5zaXplCQkgICA9IDB4JWxseFxuIiwKIAkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxtYi0+bWVtb3J5LnNpemUpOwogCWZvciAoaT0wOyBpIDwgbG1iLT5tZW1vcnkuY250IDtpKyspIHsKLQkJZGVidWcoIiAgICBtZW1vcnkucmVnWzB4JXhdLmJhc2UgICA9IDB4JWxseFxuIiwgaSwKLQkJCWxtYi0+bWVtb3J5LnJlZ2lvbltpXS5iYXNlKTsKKwkJZGVidWcoIiAgICBtZW1vcnkucmVnWzB4JWx4XS5iYXNlICAgPSAweCVsbHhcbiIsIGksCisJCQkobG9uZyBsb25nIHVuc2lnbmVkKWxtYi0+bWVtb3J5LnJlZ2lvbltpXS5iYXNlKTsKIAkJZGVidWcoIgkJICAgLnNpemUgICA9IDB4JWxseFxuIiwKLQkJCWxtYi0+bWVtb3J5LnJlZ2lvbltpXS5zaXplKTsKKwkJCShsb25nIGxvbmcgdW5zaWduZWQpbG1iLT5tZW1vcnkucmVnaW9uW2ldLnNpemUpOwogCX0KIAotCWRlYnVnKCJcbiAgICByZXNlcnZlZC5jbnQJICAgPSAweCVseFxuIiwgbG1iLT5yZXNlcnZlZC5jbnQpOwotCWRlYnVnKCIgICAgcmVzZXJ2ZWQuc2l6ZQkgICA9IDB4JWxseFxuIiwgbG1iLT5yZXNlcnZlZC5zaXplKTsKKwlkZWJ1ZygiXG4gICAgcmVzZXJ2ZWQuY250CSAgID0gMHglbHhcbiIsCisJCWxtYi0+cmVzZXJ2ZWQuY250KTsKKwlkZWJ1ZygiICAgIHJlc2VydmVkLnNpemUJICAgPSAweCVsbHhcbiIsCisJCShsb25nIGxvbmcgdW5zaWduZWQpbG1iLT5yZXNlcnZlZC5zaXplKTsKIAlmb3IgKGk9MDsgaSA8IGxtYi0+cmVzZXJ2ZWQuY250IDtpKyspIHsKLQkJZGVidWcoIiAgICByZXNlcnZlZC5yZWdbMHgleF0uYmFzZSA9IDB4JWxseFxuIiwgaSwKLQkJCWxtYi0+cmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UpOworCQlkZWJ1ZygiICAgIHJlc2VydmVkLnJlZ1sweCVseF0uYmFzZSA9IDB4JWxseFxuIiwgaSwKKwkJCShsb25nIGxvbmcgdW5zaWduZWQpbG1iLT5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSk7CiAJCWRlYnVnKCIJCSAgICAgLnNpemUgPSAweCVsbHhcbiIsCi0JCQlsbWItPnJlc2VydmVkLnJlZ2lvbltpXS5zaXplKTsKKwkJCShsb25nIGxvbmcgdW5zaWduZWQpbG1iLT5yZXNlcnZlZC5yZWdpb25baV0uc2l6ZSk7CiAJfQogI2VuZGlmIC8qIERFQlVHICovCiB9CkBAIC0yNjYsNyArMjY4LDcgQEAKIAogCWlmIChhbGxvYyA9PSAwKQogCQlwcmludGYoIkVSUk9SOiBGYWlsZWQgdG8gYWxsb2NhdGUgMHglbHggYnl0ZXMgYmVsb3cgMHglbHguXG4iLAotCQkgICAgICBzaXplLCBtYXhfYWRkcik7CisJCSAgICAgICh1bG9uZylzaXplLCAodWxvbmcpbWF4X2FkZHIpOwogCiAJcmV0dXJuIGFsbG9jOwogfQpkaWZmIC0tZ2l0IGEvbGliX2dlbmVyaWMvdnNwcmludGYuYyBiL2xpYl9nZW5lcmljL3ZzcHJpbnRmLmMKaW5kZXggM2RiNmMzZi4uN2M5Y2ZlMSAxMDA2NDQKLS0tIGEvbGliX2dlbmVyaWMvdnNwcmludGYuYworKysgYi9saWJfZ2VuZXJpYy92c3ByaW50Zi5jCkBAIC0yNjIsNyArMjYyLDkgQEAKIAogCQkvKiBnZXQgdGhlIGNvbnZlcnNpb24gcXVhbGlmaWVyICovCiAJCXF1YWxpZmllciA9IC0xOwotCQlpZiAoKmZtdCA9PSAnaCcgfHwgKmZtdCA9PSAnbCcgfHwgKmZtdCA9PSAncScpIHsKKwkJaWYgKCpmbXQgPT0gJ2gnIHx8ICpmbXQgPT0gJ2wnIHx8ICpmbXQgPT0gJ0wnIHx8CisJCSAgICAqZm10ID09ICdaJyB8fCAqZm10ID09ICd6JyB8fCAqZm10ID09ICd0JyB8fAorCQkgICAgKmZtdCA9PSAncScgKSB7CiAJCQlxdWFsaWZpZXIgPSAqZm10OwogCQkJaWYgKHF1YWxpZmllciA9PSAnbCcgJiYgKihmbXQrMSkgPT0gJ2wnKSB7CiAJCQkJcXVhbGlmaWVyID0gJ3EnOwpAQCAtMzU1LDkgKzM1NywxMyBAQAogCQkJbnVtID0gdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGxvbmcgbG9uZyk7CiAJCWVsc2UKICNlbmRpZgotCQlpZiAocXVhbGlmaWVyID09ICdsJykKKwkJaWYgKHF1YWxpZmllciA9PSAnbCcpIHsKIAkJCW51bSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKLQkJZWxzZSBpZiAocXVhbGlmaWVyID09ICdoJykgeworCQl9IGVsc2UgaWYgKHF1YWxpZmllciA9PSAnWicgfHwgcXVhbGlmaWVyID09ICd6JykgeworCQkJbnVtID0gdmFfYXJnKGFyZ3MsIHNpemVfdCk7CisJCX0gZWxzZSBpZiAocXVhbGlmaWVyID09ICd0JykgeworCQkJbnVtID0gdmFfYXJnKGFyZ3MsIHB0cmRpZmZfdCk7CisJCX0gZWxzZSBpZiAocXVhbGlmaWVyID09ICdoJykgewogCQkJbnVtID0gKHVuc2lnbmVkIHNob3J0KSB2YV9hcmcoYXJncywgaW50KTsKIAkJCWlmIChmbGFncyAmIFNJR04pCiAJCQkJbnVtID0gKHNob3J0KSBudW07CmRpZmYgLS1naXQgYS9saWJfbTY4ay9ib2FyZC5jIGIvbGliX202OGsvYm9hcmQuYwppbmRleCBhZTk0MmU1Li5hMTNlYTI2IDEwMDY0NAotLS0gYS9saWJfbTY4ay9ib2FyZC5jCisrKyBiL2xpYl9tNjhrL2JvYXJkLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiBzdGF0aWMgaW50IGluaXRfYmF1ZHJhdGUgKHZvaWQpCiB7Ci0JdWNoYXIgdG1wWzY0XTsJLyogbG9uZyBlbm91Z2ggZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworCWNoYXIgdG1wWzY0XTsJLyogbG9uZyBlbm91Z2ggZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyAqLwogCWludCBpID0gZ2V0ZW52X3IgKCJiYXVkcmF0ZSIsIHRtcCwgc2l6ZW9mICh0bXApKTsKIAogCWdkLT5iYXVkcmF0ZSA9IChpID4gMCkKQEAgLTI2Nyw3ICsyNjcsNyBAQAogI2lmZGVmIENPTkZJR19QUkFNCiAJaW50IGk7CiAJdWxvbmcgcmVnOwotCXVjaGFyIHRtcFs2NF07CQkvKiBsb25nIGVub3VnaCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisJY2hhciB0bXBbNjRdOwkJLyogbG9uZyBlbm91Z2ggZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyAqLwogI2VuZGlmCiAKIAkvKiBQb2ludGVyIGlzIHdyaXRhYmxlIHNpbmNlIHdlIGFsbG9jYXRlZCBhIHJlZ2lzdGVyIGZvciBpdCAqLwpAQCAtMzQ3LDExICszNDcsMTEgQEAKIAlhZGRyX3NwIC09IHNpemVvZiAoYmRfdCk7CiAJYmQgPSAoYmRfdCAqKSBhZGRyX3NwOwogCWdkLT5iZCA9IGJkOwotCWRlYnVnICgiUmVzZXJ2aW5nICVkIEJ5dGVzIGZvciBCb2FyZCBJbmZvIGF0OiAlMDhseFxuIiwKKwlkZWJ1ZyAoIlJlc2VydmluZyAlenUgQnl0ZXMgZm9yIEJvYXJkIEluZm8gYXQ6ICUwOGx4XG4iLAogCQkJc2l6ZW9mIChiZF90KSwgYWRkcl9zcCk7CiAJYWRkcl9zcCAtPSBzaXplb2YgKGdkX3QpOwogCWlkID0gKGdkX3QgKikgYWRkcl9zcDsKLQlkZWJ1ZyAoIlJlc2VydmluZyAlZCBCeXRlcyBmb3IgR2xvYmFsIERhdGEgYXQ6ICUwOGx4XG4iLAorCWRlYnVnICgiUmVzZXJ2aW5nICV6dSBCeXRlcyBmb3IgR2xvYmFsIERhdGEgYXQ6ICUwOGx4XG4iLAogCQkJc2l6ZW9mIChnZF90KSwgYWRkcl9zcCk7CiAKIAkvKiBSZXNlcnZlIG1lbW9yeSBmb3IgYm9vdCBwYXJhbXMuICovCkBAIC03NTIsNyArNzUyLDcgQEAKIAkgKi8KIAl7CiAJCXVsb25nIHByYW07Ci0JCXVjaGFyIG1lbXN6WzMyXTsKKwkJY2hhciBtZW1zelszMl07CiAjaWZkZWYgQ09ORklHX1BSQU0KIAkJY2hhciAqczsKIApkaWZmIC0tZ2l0IGEvbGliX21pcHMvYm9hcmQuYyBiL2xpYl9taXBzL2JvYXJkLmMKaW5kZXggNTMyNTUwYi4uMDliOGIzYiAxMDA2NDQKLS0tIGEvbGliX21pcHMvYm9hcmQuYworKysgYi9saWJfbWlwcy9ib2FyZC5jCkBAIC0yNDIsMTIgKzI0MiwxMiBAQAogCWFkZHJfc3AgLT0gc2l6ZW9mKGJkX3QpOwogCWJkID0gKGJkX3QgKilhZGRyX3NwOwogCWdkLT5iZCA9IGJkOwotCWRlYnVnICgiUmVzZXJ2aW5nICVkIEJ5dGVzIGZvciBCb2FyZCBJbmZvIGF0OiAlMDhseFxuIiwKKwlkZWJ1ZyAoIlJlc2VydmluZyAlenUgQnl0ZXMgZm9yIEJvYXJkIEluZm8gYXQ6ICUwOGx4XG4iLAogCQkJc2l6ZW9mKGJkX3QpLCBhZGRyX3NwKTsKIAogCWFkZHJfc3AgLT0gc2l6ZW9mKGdkX3QpOwogCWlkID0gKGdkX3QgKilhZGRyX3NwOwotCWRlYnVnICgiUmVzZXJ2aW5nICVkIEJ5dGVzIGZvciBHbG9iYWwgRGF0YSBhdDogJTA4bHhcbiIsCisJZGVidWcgKCJSZXNlcnZpbmcgJXp1IEJ5dGVzIGZvciBHbG9iYWwgRGF0YSBhdDogJTA4bHhcbiIsCiAJCQlzaXplb2YgKGdkX3QpLCBhZGRyX3NwKTsKIAogCS8qIFJlc2VydmUgbWVtb3J5IGZvciBib290IHBhcmFtcy4KZGlmZiAtLWdpdCBhL2xpYl9taXBzL2Jvb3RtLmMgYi9saWJfbWlwcy9ib290bS5jCmluZGV4IDhmZTM3ODIuLjVjNDZhNWEgMTAwNjQ0Ci0tLSBhL2xpYl9taXBzL2Jvb3RtLmMKKysrIGIvbGliX21pcHMvYm9vdG0uYwpAQCAtNTQsNyArNTQsNyBAQAogCWNoYXIJKmNvbW1hbmRsaW5lID0gZ2V0ZW52ICgiYm9vdGFyZ3MiKTsKIAljaGFyCWVudl9idWZbMTJdOwogCWludAlyZXQ7Ci0JY29uc3QgY2hhciAqY3A7CisJY2hhcgkqY3A7CiAKIAkvKiBmaW5kIGtlcm5lbCBlbnRyeSBwb2ludCAqLwogCWlmIChpbWFnZXMtPmxlZ2FjeV9oZHJfdmFsaWQpIHsKQEAgLTg5LDE1ICs4OSwxMSBAQAogCWxpbnV4X3BhcmFtc19pbml0IChVTkNBQ0hFRF9TRFJBTSAoZ2QtPmJkLT5iaV9ib290X3BhcmFtcyksIGNvbW1hbmRsaW5lKTsKIAogI2lmZGVmIENPTkZJR19NRU1TSVpFX0lOX0JZVEVTCi0Jc3ByaW50ZiAoZW52X2J1ZiwgIiVsdSIsIGdkLT5yYW1fc2l6ZSk7Ci0jaWZkZWYgREVCVUcKLQlwcmludGYgKCIjIyBHaXZpbmcgbGludXggbWVtc2l6ZSBpbiBieXRlcywgJWx1XG4iLCBnZC0+cmFtX3NpemUpOwotI2VuZGlmCisJc3ByaW50ZiAoZW52X2J1ZiwgIiVsdSIsICh1bG9uZylnZC0+cmFtX3NpemUpOworCWRlYnVnICgiIyMgR2l2aW5nIGxpbnV4IG1lbXNpemUgaW4gYnl0ZXMsICVsdVxuIiwgKHVsb25nKWdkLT5yYW1fc2l6ZSk7CiAjZWxzZQotCXNwcmludGYgKGVudl9idWYsICIlbHUiLCBnZC0+cmFtX3NpemUgPj4gMjApOwotI2lmZGVmIERFQlVHCi0JcHJpbnRmICgiIyMgR2l2aW5nIGxpbnV4IG1lbXNpemUgaW4gTUIsICVsdVxuIiwgZ2QtPnJhbV9zaXplID4+IDIwKTsKLSNlbmRpZgorCXNwcmludGYgKGVudl9idWYsICIlbHUiLCAodWxvbmcpKGdkLT5yYW1fc2l6ZSA+PiAyMCkpOworCWRlYnVnICgiIyMgR2l2aW5nIGxpbnV4IG1lbXNpemUgaW4gTUIsICVsdVxuIiwgKHVsb25nKShnZC0+cmFtX3NpemUgPj4gMjApKTsKICNlbmRpZiAvKiBDT05GSUdfTUVNU0laRV9JTl9CWVRFUyAqLwogCiAJbGludXhfZW52X3NldCAoIm1lbXNpemUiLCBlbnZfYnVmKTsKZGlmZiAtLWdpdCBhL2xpYl9wcGMvYm9hcmQuYyBiL2xpYl9wcGMvYm9hcmQuYwppbmRleCAxYmMyZjQ2Li43MWE3MGRiIDEwMDY0NAotLS0gYS9saWJfcHBjL2JvYXJkLmMKKysrIGIvbGliX3BwYy9ib2FyZC5jCkBAIC01MjQsMTEgKzUyNCwxMSBAQAogCWFkZHJfc3AgLT0gc2l6ZW9mIChiZF90KTsKIAliZCA9IChiZF90ICopIGFkZHJfc3A7CiAJZ2QtPmJkID0gYmQ7Ci0JZGVidWcgKCJSZXNlcnZpbmcgJWQgQnl0ZXMgZm9yIEJvYXJkIEluZm8gYXQ6ICUwOGx4XG4iLAorCWRlYnVnICgiUmVzZXJ2aW5nICV6dSBCeXRlcyBmb3IgQm9hcmQgSW5mbyBhdDogJTA4bHhcbiIsCiAJCQlzaXplb2YgKGJkX3QpLCBhZGRyX3NwKTsKIAlhZGRyX3NwIC09IHNpemVvZiAoZ2RfdCk7CiAJaWQgPSAoZ2RfdCAqKSBhZGRyX3NwOwotCWRlYnVnICgiUmVzZXJ2aW5nICVkIEJ5dGVzIGZvciBHbG9iYWwgRGF0YSBhdDogJTA4bHhcbiIsCisJZGVidWcgKCJSZXNlcnZpbmcgJXp1IEJ5dGVzIGZvciBHbG9iYWwgRGF0YSBhdDogJTA4bHhcbiIsCiAJCQlzaXplb2YgKGdkX3QpLCBhZGRyX3NwKTsKIAogCS8qCmRpZmYgLS1naXQgYS9uZXQvYm9vdHAuYyBiL25ldC9ib290cC5jCmluZGV4IDNjMDYxNGMuLjUxMjFjYWEgMTAwNjQ0Ci0tLSBhL25ldC9ib290cC5jCisrKyBiL25ldC9ib290cC5jCkBAIC0zMTMsNyArMzEzLDcgQEAKIAlCb290cF90ICpicDsKIAljaGFyCSpzOwogCi0JZGVidWcgKCJnb3QgQk9PVFAgcGFja2V0IChzcmM9JWQsIGRzdD0lZCwgbGVuPSVkIHdhbnRfbGVuPSVkKVxuIiwKKwlkZWJ1ZyAoImdvdCBCT09UUCBwYWNrZXQgKHNyYz0lZCwgZHN0PSVkLCBsZW49JWQgd2FudF9sZW49JXp1KVxuIiwKIAkJc3JjLCBkZXN0LCBsZW4sIHNpemVvZiAoQm9vdHBfdCkpOwogCiAJYnAgPSAoQm9vdHBfdCAqKXBrdDsKQEAgLTkyNCw4ICs5MjQsNiBAQAogCQkJaWYgKE5ldFJlYWRMb25nKCh1bG9uZyopJmJwLT5icF92ZW5kWzBdKSA9PSBodG9ubChCT09UUF9WRU5ET1JfTUFHSUMpKQogCQkJCURoY3BPcHRpb25zUHJvY2VzcygodTggKikmYnAtPmJwX3ZlbmRbNF0sIGJwKTsKIAotCQkJQm9vdHBDb3B5TmV0UGFyYW1zKGJwKTsgLyogU3RvcmUgbmV0IHBhcmFtcyBmcm9tIHJlcGx5ICovCi0KIAkJCU5ldFNldFRpbWVvdXQoVElNRU9VVCAqIENGR19IWiwgQm9vdHBUaW1lb3V0KTsKIAkJCURoY3BTZW5kUmVxdWVzdFBrdChicCk7CiAjaWZkZWYgQ0ZHX0JPT1RGSUxFX1BSRUZJWApkaWZmIC0tZ2l0IGEvbmV0L2V0aC5jIGIvbmV0L2V0aC5jCmluZGV4IDdmYzlhZWUuLjM4OTc5YWEgMTAwNjQ0Ci0tLSBhL25ldC9ldGguYworKysgYi9uZXQvZXRoLmMKQEAgLTYyNyw3ICs2MjcsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX01DRjUyeDIpCiAJbWNmNTJ4Ml9taWlwaHlfaW5pdGlhbGl6ZShiaXMpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTkVUQVJNKQorI2lmIGRlZmluZWQoQ09ORklHX0RSSVZFUl9OUzc1MjBfRVRIRVJORVQpCiAJbnM3NTIwX21paXBoeV9pbml0aWFsaXplKGJpcyk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19EUklWRVJfVElfRU1BQykKZGlmZiAtLWdpdCBhL25ldC9uZXQuYyBiL25ldC9uZXQuYwppbmRleCBmNTVjN2ZhLi4zMTNkNWQ4IDEwMDY0NAotLS0gYS9uZXQvbmV0LmMKKysrIGIvbmV0L25ldC5jCkBAIC0xMzkwLDcgKzEzOTAsNyBAQAogCQlwdXRzICgiR290IElQXG4iKTsKICNlbmRpZgogCQlpZiAobGVuIDwgSVBfSERSX1NJWkUpIHsKLQkJCWRlYnVnICgibGVuIGJhZCAlZCA8ICVkXG4iLCBsZW4sIElQX0hEUl9TSVpFKTsKKwkJCWRlYnVnICgibGVuIGJhZCAlZCA8ICVsdVxuIiwgbGVuLCAodWxvbmcpSVBfSERSX1NJWkUpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmIChsZW4gPCBudG9ocyhpcC0+aXBfbGVuKSkgewpAQCAtMTUyMCw3ICsxNTIwLDggQEAKIAkJCQl4c3VtID0gKHhzdW0gJiAweDAwMDBmZmZmKSArICgoeHN1bSA+PiAxNikgJiAweDAwMDBmZmZmKTsKIAkJCX0KIAkJCWlmICgoeHN1bSAhPSAweDAwMDAwMDAwKSAmJiAoeHN1bSAhPSAweDAwMDBmZmZmKSkgewotCQkJCXByaW50ZigiIFVEUCB3cm9uZyBjaGVja3N1bSAlMDh4ICUwOHhcbiIsIHhzdW0sIG50b2hzKGlwLT51ZHBfeHN1bSkpOworCQkJCXByaW50ZigiIFVEUCB3cm9uZyBjaGVja3N1bSAlMDhseCAlMDh4XG4iLAorCQkJCQl4c3VtLCBudG9ocyhpcC0+dWRwX3hzdW0pKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL3Bvc3QvY3B1L3BwYzR4eC9zcHIuYyBiL3Bvc3QvY3B1L3BwYzR4eC9zcHIuYwppbmRleCA2MTUyZWIyLi4xMTBkZjZlIDEwMDY0NAotLS0gYS9wb3N0L2NwdS9wcGM0eHgvc3ByLmMKKysrIGIvcG9zdC9jcHUvcHBjNHh4L3Nwci5jCkBAIC03Niw3ICs3Niw5IEBACiAJezB4M2IsCSJDU1JSMSIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAogCXsweDNkLAkiREVBUiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKIAl7MHgzZSwJIkVTUiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKyNpZmRlZiBDT05GSUdfNDQwCiAJezB4M2YsCSJJVlBSIiwJCTB4ZmZmZjAwMDAsCTB4MDAwMDAwMDB9LAorI2VuZGlmCiAJezB4MTAwLAkiVVNQUkcwIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCiAJezB4MTA0LAkiU1BSRzQiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKIAl7MHgxMDUsCSJTUFJHNSIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LApkaWZmIC0tZ2l0IGEvcG9zdC9saWJfcHBjL2IuYyBiL3Bvc3QvbGliX3BwYy9iLmMKaW5kZXggNDViOWZmMi4uN2EyNTgzZCAxMDA2NDQKLS0tIGEvcG9zdC9saWJfcHBjL2IuYworKysgYi9wb3N0L2xpYl9wcGMvYi5jCkBAIC05NSw2ICs5NSw3IEBACiB7CiAgICAgaW50IHJldCA9IDA7CiAgICAgdW5zaWduZWQgaW50IGk7CisgICAgaW50IGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAogICAgIGlmIChyZXQgPT0gMCkKICAgICB7CkBAIC0xODgsNiArMTg5LDkgQEAKIAl9CiAgICAgfQogCisgICAgaWYgKGZsYWcpCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKwogICAgIHJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Bvc3QvbGliX3BwYy9jbXAuYyBiL3Bvc3QvbGliX3BwYy9jbXAuYwppbmRleCA4ZDgwZjg2Li4xMzgwOWQ0IDEwMDY0NAotLS0gYS9wb3N0L2xpYl9wcGMvY21wLmMKKysrIGIvcG9zdC9saWJfcHBjL2NtcC5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIHsKICAgICBpbnQgcmV0ID0gMDsKICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBpbnQgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGNwdV9wb3N0X2NtcF9zaXplICYmIHJldCA9PSAwOyBpKyspCiAgICAgewpAQCAtMTI0LDYgKzEyNSw5IEBACiAJfQogICAgIH0KIAorICAgIGlmIChmbGFnKQorCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKICAgICByZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9wb3N0L2xpYl9wcGMvY21waS5jIGIvcG9zdC9saWJfcHBjL2NtcGkuYwppbmRleCA5MmI0ZDU3Li41ZWNmZTg3IDEwMDY0NAotLS0gYS9wb3N0L2xpYl9wcGMvY21waS5jCisrKyBiL3Bvc3QvbGliX3BwYy9jbXBpLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogewogICAgIGludCByZXQgPSAwOwogICAgIHVuc2lnbmVkIGludCBpOworICAgIGludCBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgY3B1X3Bvc3RfY21waV9zaXplICYmIHJldCA9PSAwOyBpKyspCiAgICAgewpAQCAtMTI0LDYgKzEyNSw5IEBACiAJfQogICAgIH0KIAorICAgIGlmIChmbGFnKQorCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKICAgICByZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9wb3N0L2xpYl9wcGMvY29tcGxleC5jIGIvcG9zdC9saWJfcHBjL2NvbXBsZXguYwppbmRleCAyNzEzOTJhLi40OTgzYzUxIDEwMDY0NAotLS0gYS9wb3N0L2xpYl9wcGMvY29tcGxleC5jCisrKyBiL3Bvc3QvbGliX3BwYy9jb21wbGV4LmMKQEAgLTEwMSw2ICsxMDEsNyBAQAogaW50IGNwdV9wb3N0X3Rlc3RfY29tcGxleCAodm9pZCkKIHsKICAgICBpbnQgcmV0ID0gMDsKKyAgICBpbnQgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCiAgICAgaWYgKHJldCA9PSAwKQogICAgIHsKQEAgLTExNyw2ICsxMTgsOSBAQAogCXBvc3RfbG9nICgiRXJyb3IgYXQgY29tcGxleCB0ZXN0ICFcbiIpOwogICAgIH0KIAorICAgIGlmIChmbGFnKQorCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKICAgICByZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9wb3N0L2xpYl9wcGMvY3IuYyBiL3Bvc3QvbGliX3BwYy9jci5jCmluZGV4IDBiZDllNzQuLjJjNzk3NmEgMTAwNjQ0Ci0tLSBhL3Bvc3QvbGliX3BwYy9jci5jCisrKyBiL3Bvc3QvbGliX3BwYy9jci5jCkBAIC0yNDgsNiArMjQ4LDcgQEAKICAgICBpbnQgcmV0ID0gMDsKICAgICB1bnNpZ25lZCBpbnQgaTsKICAgICB1bnNpZ25lZCBsb25nIGNyX3NhdjsKKyAgICBpbnQgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCiAgICAgYXNtICggIm1mY3IgJTAiIDogIj1yIiAoY3Jfc2F2KSA6ICk7CiAKQEAgLTM0Nyw2ICszNDgsOSBAQAogCiAgICAgYXNtICggIm10Y3IgJTAiIDogOiAiciIgKGNyX3NhdikpOwogCisgICAgaWYgKGZsYWcpCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKwogICAgIHJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Bvc3QvbGliX3BwYy9sb2FkLmMgYi9wb3N0L2xpYl9wcGMvbG9hZC5jCmluZGV4IDg2YmMyMjMuLmVjY2ViYjcgMTAwNjQ0Ci0tLSBhL3Bvc3QvbGliX3BwYy9sb2FkLmMKKysrIGIvcG9zdC9saWJfcHBjL2xvYWQuYwpAQCAtMTc4LDYgKzE3OCw3IEBACiB7CiAgICAgaW50IHJldCA9IDA7CiAgICAgdW5zaWduZWQgaW50IGk7CisgICAgaW50IGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBjcHVfcG9zdF9sb2FkX3NpemUgJiYgcmV0ID09IDA7IGkrKykKICAgICB7CkBAIC0yNDYsNiArMjQ3LDkgQEAKIAl9CiAgICAgfQogCisgICAgaWYgKGZsYWcpCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKwogICAgIHJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Bvc3QvbGliX3BwYy9tdWx0aS5jIGIvcG9zdC9saWJfcHBjL211bHRpLmMKaW5kZXggNWQzZjU4NC4uNDcxMzVhYiAxMDA2NDQKLS0tIGEvcG9zdC9saWJfcHBjL211bHRpLmMKKysrIGIvcG9zdC9saWJfcHBjL211bHRpLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIHsKICAgICBpbnQgcmV0ID0gMDsKICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBpbnQgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCiAgICAgaWYgKHJldCA9PSAwKQogICAgIHsKQEAgLTcyLDYgKzczLDkgQEAKIAlwb3N0X2xvZyAoIkVycm9yIGF0IG11bHRpIHRlc3QgIVxuIik7CiAgICAgfQogCisgICAgaWYgKGZsYWcpCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKwogICAgIHJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Bvc3QvbGliX3BwYy9zdG9yZS5jIGIvcG9zdC9saWJfcHBjL3N0b3JlLmMKaW5kZXggMDllYzQ4NS4uYzk2ZjI2MyAxMDA2NDQKLS0tIGEvcG9zdC9saWJfcHBjL3N0b3JlLmMKKysrIGIvcG9zdC9saWJfcHBjL3N0b3JlLmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogewogICAgIGludCByZXQgPSAwOwogICAgIHVuc2lnbmVkIGludCBpOworICAgIGludCBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgY3B1X3Bvc3Rfc3RvcmVfc2l6ZSAmJiByZXQgPT0gMDsgaSsrKQogICAgIHsKQEAgLTIyNiw2ICsyMjcsOSBAQAogCX0KICAgICB9CiAKKyAgICBpZiAoZmxhZykKKwllbmFibGVfaW50ZXJydXB0cygpOworCiAgICAgcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvcG9zdC9saWJfcHBjL3N0cmluZy5jIGIvcG9zdC9saWJfcHBjL3N0cmluZy5jCmluZGV4IGIyZGFhODguLjM2ODNhYzkgMTAwNjQ0Ci0tLSBhL3Bvc3QvbGliX3BwYy9zdHJpbmcuYworKysgYi9wb3N0L2xpYl9wcGMvc3RyaW5nLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIHsKICAgICBpbnQgcmV0ID0gMDsKICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBpbnQgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCiAgICAgaWYgKHJldCA9PSAwKQogICAgIHsKQEAgLTk3LDYgKzk4LDkgQEAKIAlwb3N0X2xvZyAoIkVycm9yIGF0IHN0cmluZyB0ZXN0ICFcbiIpOwogICAgIH0KIAorICAgIGlmIChmbGFnKQorCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKICAgICByZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS90b29scy8uZ2l0aWdub3JlIGIvdG9vbHMvLmdpdGlnbm9yZQppbmRleCBkZjM1MDBkLi4xNTdiNjc5IDEwMDY0NAotLS0gYS90b29scy8uZ2l0aWdub3JlCisrKyBiL3Rvb2xzLy5naXRpZ25vcmUKQEAgLTYsOCArNiwxMSBAQAogL2ltZzJzcmVjCiAvbWQ1LmMKIC9ta2ltYWdlCisvbXBjODZ4X2NsaworL25jcAogL3NoYTEuYwogL3Vic2hhMQorL2luY2Etc3dhcC1ieXRlcwogL2ltYWdlLmMKIC9mZHQuYwogL2ZkdF9yby5jCmRpZmYgLS1naXQgYS90b29scy9nZGIvTWFrZWZpbGUgYi90b29scy9nZGIvTWFrZWZpbGUKaW5kZXggNjMyMTAzZC4uYzQ0Y2M4YSAxMDA2NDQKLS0tIGEvdG9vbHMvZ2RiL01ha2VmaWxlCisrKyBiL3Rvb2xzL2dkYi9NYWtlZmlsZQpAQCAtNDcsNyArNDcsNyBAQAogaWZlcSAoJChIT1NUT1MpLGN5Z3dpbikKIAogYWxsOgotLmRlcGVuZDoKKyQob2JqKS5kZXBlbmQ6CiAKIGVsc2UJIyAhIENZR1dJTgogCmRpZmYgLS1naXQgYS90b29scy91cGRhdGVyL2NtZF9mbGFzaC5jIGIvdG9vbHMvdXBkYXRlci9jbWRfZmxhc2guYwppbmRleCBhOTc2ZTBkLi4wZjZmNjJiIDEwMDY0NAotLS0gYS90b29scy91cGRhdGVyL2NtZF9mbGFzaC5jCisrKyBiL3Rvb2xzL3VwZGF0ZXIvY21kX2ZsYXNoLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCiAJZXJhc2VkID0gMDsKIAotCWZvciAoYmFuaz0wLGluZm89JmZsYXNoX2luZm9bMF07IGJhbmsgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2JhbmssICsraW5mbykgeworCWZvciAoYmFuaz0wLGluZm8gPSAmZmxhc2hfaW5mb1swXTsgYmFuayA8IENGR19NQVhfRkxBU0hfQkFOS1M7ICsrYmFuaywgKytpbmZvKSB7CiAJCXVsb25nIGJfZW5kOwogCQlpbnQgc2VjdDsKIApAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAlwcm90ZWN0ZWQgPSAwOwogCi0JZm9yIChiYW5rPTAsaW5mbz0mZmxhc2hfaW5mb1swXTsgYmFuayA8IENGR19NQVhfRkxBU0hfQkFOS1M7ICsrYmFuaywgKytpbmZvKSB7CisJZm9yIChiYW5rPTAsaW5mbyA9ICZmbGFzaF9pbmZvWzBdOyBiYW5rIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgKytiYW5rLCArK2luZm8pIHsKIAkJdWxvbmcgYl9lbmQ7CiAJCWludCBzZWN0OwogCmRpZmYgLS1naXQgYS90b29scy91cGRhdGVyL2ZsYXNoLmMgYi90b29scy91cGRhdGVyL2ZsYXNoLmMKaW5kZXggMWVkNzdiMS4uYTczMTU5ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdXBkYXRlci9mbGFzaC5jCisrKyBiL3Rvb2xzL3VwZGF0ZXIvZmxhc2guYwpAQCAtOTMsNyArOTMsNyBAQAogCWZsYXNoX2luZm9fdCAqaW5mbzsKIAlpbnQgaTsKIAotCWZvciAoaT0wLCBpbmZvPSZmbGFzaF9pbmZvWzBdOyBpPENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSwgKytpbmZvKSB7CisJZm9yIChpPTAsIGluZm8gPSAmZmxhc2hfaW5mb1swXTsgaTxDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2ksICsraW5mbykgewogCQlpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTiAmJgogCQkgICAgYWRkciA+PSBpbmZvLT5zdGFydFswXSAmJgogCQkgICAgLyogV0FSTklORyAtIFRoZSAnLSAxJyBpcyBuZWVkZWQgaWYgdGhlIGZsYXNoCg==